VirtualBox VERR_VD_IMAGE_READ_ONLY 에러



disk2vhd 로 만든 윈도우 가상디스크를 VirtualBox 에서 기존 가상디스크로 연결해서 시작했더니 아래와 같은 에러가 나오네요~


가상 머신 Win10Pro64의 세션을 열 수 없습니다.


Failed to open image 'C:\Win10.VHD' for writing due to wrong permissions (VERR_VD_IMAGE_READ_ONLY).


AHCI: Failed to attach drive to Port0 (VERR_VD_IMAGE_READ_ONLY).


결과 코드: E_FAIL (0x80004005)

구성 요소: ConsoleWrap

인터페이스: IConsole {872da645-4a9b-1727-bee2-5585105b9eed}


VirtualBox.exe 를 마우스 우측 버튼을 클릭해서 관리자 권한으로 실행하면 이상없이 실행이 됩니다.


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

실제 디스크를 VHD 가상디스크로 변환하기



실제 사용하고 있는 운영체제가 들어 있는 디스크를 VirtualBox 같은 가상화서버에서 사용하는 VHD 가상디스크로 만들수 있습니다.


https://docs.microsoft.com/ko-kr/sysinternals/downloads/disk2vhd 여기에서 다운로드가 가능합니다.



실제 디스크를 VHD 가상디스크로 변환하기


Use Vhdx 는 체크를 해제 하여야 합니다.


해제하지 않고 진행하면 아래와 같은 에러가 발생합니다.


디스크 이미지 파일 C:\Win10.VHDX을(를) 열 수 없습니다.

Could not open the medium 'C:\Win10.VHDX'.

VD: error VERR_NOT_SUPPORTED opening image file 'C:\Win10.VHDX' (VERR_NOT_SUPPORTED).

결과 코드: E_FAIL (0x80004005)
구성 요소: MediumWrap
인터페이스: IMedium {4afe423b-43e0-e9d0-82e8-ceb307940dda}
호출자: IVirtualBox {0169423f-46b4-cde9-91af-1e9d5b6cd945}
호출자 RC: VBOX_E_OBJECT_NOT_FOUND (0x80BB0001)


만들어진  vhd 파일은 VirtualBox 를 관리자 권한으로 실행해서 가상디스크를 연결하고 사용하면 됩니다.


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

XenServer ISO 이미지 마운트 하기



XenCenter 프로그램에서는 쉽게 커스텀이미지를 마운트하는 기능이 없네요~


우선 윈도우 iso 이미지 파일을 젠서버로 업로드를 하여야 합니다.


젠서버 설치가 끝나고 나면 ssh 로 접속을 할 수가 있습니다.


wget 으로 다운로드 받거나 ftp 로 다운로드를 하면 됩니다.



# xe sr-create name-label="Local ISO" type=iso device-config:location=/root/ device-config:legacy_mode=true content-type=iso


device-config:location= 에 iso 이미지가 있는 폴더명을 적어주면 됩니다.


XenServer ISO 이미지 마운트 하기


XenCenter 에서 iso 이미지가 마운트 된 것을 바로 확인이 가능합니다.



XenCenter ISO 윈도우 설치


이제 New VM 을 눌러서 윈도우를 설치할 수 있습니다.



XenCenter ISO 윈도우 설치


조금전에 마운트한 iso 파일을 선택하면 됩니다.



블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

XenServer 설치

IT이야기 2017. 7. 28. 18:05

XenServer 설치



코노하 VPS 에 2G RAM / 3 Core 에 젠서버를 설치해보았습니다.


코노하 vps 는 "HVM is required for this operation" 이런 메시지가 떠서 VM 설치가 되지 않더군요~


아무튼 설치 방법만 보도록 합니다.


Virtio disk 와 network 는 Off 로 설정하고 진행하여야 합니다.



XenServer 설치


qwerty us 선택



XenServer 설치


Ok 누르면 됩니다.



XenServer 설치


CITRIX LICENSE AGREEMENT 에서 Accept EULA 를 선택합니다.



XenServer 설치


Ok 선택



XenServer 설치


Enable thin provisioning (Optimized storage for XenDesktop) 체크하고 Ok


할당한 용량을 정확하게 지킬려면 체크를 안해야 한다는군요~



XenServer 설치


Local media 를 선택



XenServer 설치


Skip 해도 되지만 Verify 로 진행



XenServer 설치


이상이 없다는군요~



XenServer 설치


젠서버의 비밀번호를 설정합니다.



XenServer 설치


고정아이피가 아니므로 DHCP 선택


고정 ip 가 있다면 Static 으로 설정하면 됩니다.



XenServer 설치


Hostname 및 DNS 정보를 설정합니다.



XenServer 설치


Time Zone 은 Asia



XenServer 설치


Seoul 선택



XenServer 설치


시간 동기화는 NTP 가 좋겠지요.



XenServer 설치


Ok 선택



XenServer 설치


Install XenServer 선택



XenServer 설치


설치가 되고 있습니다.



XenServer 설치


Supplemental Packs 는 No



XenServer 설치


설치 ISO 를 제거하면 됩니다.



XenServer 설치


XenServer 가 부팅된 화면입니다.



XenServer 설치


서버 아이피를 브라우저에 입력하고 로딩합니다.


XenCenter installer 를 클릭해서 다운로드 및 설치합니다.



XenServer 설치


설치가 다 되었습니다.



XenServer 설치


Add New Server 를 클릭 후


서버 아이피와 비밀번호를 입력하면 됩니다.



블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

MySQL INNODB 에서 INSERT 속도 느린 문제



루프문으로 여러건을 테이블에 insert 할 때 속도 너무 느리다면 아래의 글로벌 변수를 확인해보세요.


show variables like 'innodb_flush_log_at_trx_commit';


이 값이 1 로 나온다면 0 이나 2 로 설정하시면 됩니다.


set global innodb_flush_log_at_trx_commit = 2;



innodb_flush_log_at_trx_commit 에 대한 설명은 아래를 참고하세요.


https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit


innodb_flush_log_at_trx_commit



1 : 기본값

0 : mysqld 가 crash 되면 최대 초당 트랜젝션이 손실 될 수 있음.

2 : crash 되거나 정전시 두번째 트랜젝션을 잃을 수 있음.


1이 아니면 데이터가 손실될 수 있다는 이야기네요~


loop 돌리기 전에 0 또는 2 로 설정하고 loop 가 끝나면 다시 1 로 설정하면 되겠습니다.


'IT이야기' 카테고리의 다른 글

XenServer ISO 이미지 마운트 하기  (0) 2017.07.30
XenServer 설치  (0) 2017.07.28
MySQL mysql vs mysqli vs pdo Benchmark Test  (0) 2017.07.27
MySQL mysqli 함수 샘플  (0) 2017.07.26
MySQL 인덱스 없는 조인이 너무 많습니다  (0) 2017.07.13
블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

MySQL mysql vs mysqli vs pdo Benchmark Test



mysql, mariadb 모두 테스트를 해보았지만 결과는 거의 비슷하게 나왔습니다.


처리 속도 Benchmark 테스트는 아래의 PHP 소스 코드로 진행하였습니다.



▶ 벤치마크 테스트 소스


<?php

error_reporting(E_ALL);

ini_set('display_errors', TRUE);

ini_set('display_startup_errors', TRUE);

set_time_limit(0);


$db_addr = '127.0.0.1';

$db_user = 'user';

$db_pass = 'pass';

$table = 'test.benchmark_table';


benchmark($table, 100000);


function benchmark($table, $rows) {

  global $db_addr;

  global $db_user;

  global $db_pass;

  $table_innodb1 = $table."_innodb1";

  $table_innodb2 = $table."_innodb2";

  $table_innodb3 = $table."_innodb3";

  $table_myisam1 = $table."_myisam1";

  $table_myisam2 = $table."_myisam2";

  $table_myisam3 = $table."_myisam3";


  mysql_connect($db_addr, $db_user, $db_pass);

  mysql_query('drop table if exists '.$table_innodb1);

  mysql_query('drop table if exists '.$table_innodb2);

  mysql_query('drop table if exists '.$table_innodb3);

  mysql_query('drop table if exists '.$table_myisam1);

  mysql_query('drop table if exists '.$table_myisam2);

  mysql_query('drop table if exists '.$table_myisam3);

  mysql_query("CREATE TABLE $table_innodb1 (id int(11) AUTO_INCREMENT, str1 varchar(255), rint int(11), PRIMARY KEY (id)) ENGINE=INNODB");

  mysql_query("CREATE TABLE $table_innodb2 (id int(11) AUTO_INCREMENT, str1 varchar(255), rint int(11), PRIMARY KEY (id)) ENGINE=INNODB");

  mysql_query("CREATE TABLE $table_innodb3 (id int(11) AUTO_INCREMENT, str1 varchar(255), rint int(11), PRIMARY KEY (id)) ENGINE=INNODB");

  mysql_query("CREATE TABLE $table_myisam1 (id int(11) AUTO_INCREMENT, str1 varchar(255), rint int(11), PRIMARY KEY (id)) ENGINE=MyISAM");

  mysql_query("CREATE TABLE $table_myisam2 (id int(11) AUTO_INCREMENT, str1 varchar(255), rint int(11), PRIMARY KEY (id)) ENGINE=MyISAM");

  mysql_query("CREATE TABLE $table_myisam3 (id int(11) AUTO_INCREMENT, str1 varchar(255), rint int(11), PRIMARY KEY (id)) ENGINE=MyISAM");


  mysql_query("begin");

  for ($i=0; $i<$rows; $i++) {

    mysql_query("insert into $table_innodb1 values (0, 'benchmark test $i', rand() * $rows * 100)");

    mysql_query("insert into $table_innodb2 values (0, 'benchmark test $i', rand() * $rows * 100)");

    mysql_query("insert into $table_innodb3 values (0, 'benchmark test $i', rand() * $rows * 100)");

    mysql_query("insert into $table_myisam1 values (0, 'benchmark test $i', rand() * $rows * 100)");

    mysql_query("insert into $table_myisam2 values (0, 'benchmark test $i', rand() * $rows * 100)");

    mysql_query("insert into $table_myisam3 values (0, 'benchmark test $i', rand() * $rows * 100)");

  }

  mysql_query("commit");


  mysql_conn1($db_addr, $db_user, $db_pass, $table_innodb1);

  mysql_conn2($db_addr, $db_user, $db_pass, $table_innodb2);

  mysql_conn3($db_addr, $db_user, $db_pass, $table_innodb3);

  mysql_conn1($db_addr, $db_user, $db_pass, $table_myisam1);

  mysql_conn2($db_addr, $db_user, $db_pass, $table_myisam2);

  mysql_conn3($db_addr, $db_user, $db_pass, $table_myisam3);

}


function mysql_conn1($db_addr, $db_user, $db_pass, $table) {

  $i = 0;

  $start = get_time();

  $db = mysql_connect($db_addr, $db_user, $db_pass);

  $result = mysql_query('select * from '.$table, $db);

  while ($row = mysql_fetch_assoc($result)) { $i++; $test = $row; }

  mysql_close($db);

  echo 'rows : '.$i.' '.$table.' mysql '.round(get_time()-$start, 5)."<br>";

}


function mysql_conn2($db_addr, $db_user, $db_pass, $table) {

  $i = 0;

  $start = get_time();

  $db = new mysqli($db_addr, $db_user, $db_pass);

  $result = $db->query('select * from '.$table);

  while ($row = $result->fetch_assoc()) { $i++; $test = $row; }

  $db->close();

  echo 'rows : '.$i.' '.$table.' mysqli '.round(get_time()-$start, 5)."<br>";

}


function mysql_conn3($db_addr, $db_user, $db_pass, $table) {

  $i = 0;

  $start = get_time();

  $db = new PDO('mysql:host='.$db_addr, $db_user, $db_pass);

  foreach ($db->query('select * from '.$table) as $row) { $i++; $test = $row; }

  $db = null;

  echo 'rows : '.$i.' '.$table.' pdo '.round(get_time()-$start, 5)."<br>";

}


function get_time() {

  $t = explode(' ', microtime());

  return ((float)$t[0] + (float)$t[1]);

}

?>



▶ MySQL 5.1.73 결과


rows : 100000 redblue.benchmark_table_innodb1 mysql  0.39674
rows : 100000 redblue.benchmark_table_innodb2 mysqli 0.3815
rows : 100000 redblue.benchmark_table_innodb3 pdo    0.33571


rows : 100000 redblue.benchmark_table_myisam1 mysql  0.11391
rows : 100000 redblue.benchmark_table_myisam2 mysqli 0.11894
rows : 100000 redblue.benchmark_table_myisam3 pdo    0.12141



▶ MariaDB 5.5.52 결과


rows : 100000 test.benchmark_table_innodb1 mysql  0.2214
rows : 100000 test.benchmark_table_innodb2 mysqli 0.37862
rows : 100000 test.benchmark_table_innodb3 pdo    0.28196


rows : 100000 test.benchmark_table_myisam1 mysql  0.22379
rows : 100000 test.benchmark_table_myisam2 mysqli 0.19565
rows : 100000 test.benchmark_table_myisam3 pdo    0.28953


다른 분들이 테스트 한 결과에는 mysqli 가 좀 더 빠르던데 저는 이상하게 거의 비슷하게 결과가 나오는군요~


그나마 mariadb 에서는 효과가 있는 듯 합니다.


'IT이야기' 카테고리의 다른 글

XenServer 설치  (0) 2017.07.28
MySQL INNODB 에서 INSERT 속도 느린 문제  (0) 2017.07.28
MySQL mysqli 함수 샘플  (0) 2017.07.26
MySQL 인덱스 없는 조인이 너무 많습니다  (0) 2017.07.13
VNC Viewer 원격접속  (0) 2017.07.02
블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

MySQL mysqli 함수 샘플



mysql, mysqli 두 함수의 속도를 비교해 보았지만 mysqli 함수로 변경할 매리트가 있지는 않은 것 같습니다.


테스트한 환경에서는 이렇다할 속도 차이는 없는것 같습니다.


객체지향적이나 절차지향적으로 하나 이 또한 속도 차이는 없었습니다.


언제 써먹을지 모르겠지만 함수는 아래 처럼 정리하였습니다.


<?php

$db_addr = "127.0.0.1";

$db_name = "dbname";

$db_user = "user";

$db_pass = "pass";

$db_conn = "";


function DBOpen() {

global $db_conn;

global $db_addr;

global $db_name;

global $db_user;

global $db_pass;


if(!$db_conn) {

$connect = mysqli_connect($db_addr, $db_user, $db_pass, $db_name);

if(mysqli_connect_errno()) {

echo "Could not connect: " . mysqli_connect_error();

exit();

}

$db_conn = $connect;

}

return $db_conn;

}


function DBQuery($sql) {

$connect = DBOpen();

$result = mysqli_query($connect, $sql);

DBClose($connect);


return $result;

}


function DBQueryRow($sql) {

$connect = DBOpen();

$result = mysqli_query($connect, $sql);

if($result) {

$row = mysqli_fetch_row($result);

mysqli_free_result($result);

}

else {

$row = "";

}

DBClose($connect);


return $row;

}


function DBQueryRowName($sql) {

$connect = DBOpen();

$result = mysqli_query($connect, $sql);

if($result) {

$row = mysqli_fetch_array($result);

mysqli_free_result($result);

}

else {

$row = "";

}

DBClose($connect);


return $row;

}


function DBQueryArray($sql) {

$connect = DBOpen();

$result = mysqli_query($connect, $sql);

$table_result=array();

if($result) {

while($row = mysqli_fetch_assoc($result)){

$table_result[] = $row;

}

mysqli_free_result($result);

}

DBClose($connect);


return $table_result;

}


function DBQueryObject($sql) {

$connect = DBOpen();

$result = mysqli_query($connect, $sql);

if($result) {

$row = mysqli_fetch_object($result);

mysqli_free_result($result);

}

else {

$row = "";

}

DBClose($connect);


return $row;

}


function DBClose($connect) {

//mysqli_close($connect);

}

?>


위의 함수는 절차식 형식입니다.


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

MySQL 인덱스 없는 조인이 너무 많습니다



phpMyAdmin 의 시스템 분석에서 리포트 된 내용입니다.


조인에 필요한 컬럼은 대부분 인덱스가 걸려있는데도 이런 메시지가 뜨네요~


이슈:

인덱스 없는 조인이 너무 많습니다.


추천:

이는 조인시 전체 테이블 스캔이 일어난다는 것을 뜻합니다. 질의의 조인 컨디션에 사용되는 열들에 인덱스들을 추가함으로서 속도를 크게 개선할 수 있습니다.


인증:

테이블 조인 평균: 10.7 분당, 이 값은 시간당 1미만이어야 합니다.


사용된 변수 / 수식:

(Select_range_check + Select_scan + Select_full_join) / Uptime


테스트:

value * 60 * 60 > 1


상태값에서 확인을 해보았습니다.


Select full join 520

Select full range join 0

Select range 20.6 k

Select range check 0

Select scan 102.9 k


Select_scan 값이 좀 많군요~


인덱스 없는 조인도 슬로우쿼리 처럼 로그가 있다면 분석이 될텐데 좀 아쉽군요~



'IT이야기' 카테고리의 다른 글

MySQL mysql vs mysqli vs pdo Benchmark Test  (0) 2017.07.27
MySQL mysqli 함수 샘플  (0) 2017.07.26
VNC Viewer 원격접속  (0) 2017.07.02
MariaDB 암호화 복호화 방법  (0) 2017.06.30
간편 결제수단 페이팔 가입하기  (0) 2017.06.29
블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

VNC Viewer 원격접속

 


원격 데스크톱이랑 비슷한 기능을 하는 유틸리티입니다.

 

다운로드는 http://www.tightvnc.com/ 에서 VNC Viewer 를 받으면 됩니다.


TigerVNC 는 https://bintray.com/tigervnc/stable/tigervnc/1.8.0

 

자신의 컴퓨터에 설치하여 외부에서 원격접속하려면 원격 데스크톱도 있지만 VNC Server 를 설치해서 이용이 가능합니다.


TightVNC 다운로드 http://www.tightvnc.com/download.php


2.8.8 버전을 다운로드 받으면 VNC Server 와 Viewer 를 설치할 수 있습니다.

 


서버주소 및 포트번호를 입력하고 Connect 를 눌러서 비밀번호를 입력하면 됩니다.

 

5900 포트는 생략가능합니다.

 

VNC Viewer 원격접속

 

Contabo VPS 에서 제공하는 콘솔에 접속한 화면입니다.

 

 

vnc viewer 는 tightvnc 말고도 다른 종류도 있으니 취향에 맞는 유틸을 사용하면 됩니다.


 

블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

MariaDB 암호화 복호화 방법



MariaDB 에서 데이터를 encrypt, decrypt 하는 방법입니다.



▶ 데이터 암호화


select HEX( AES_ENCRYPT( '데이터', SHA2('암호키',512) ) )



▶ 데이터 복호화


select AES_DECRYPT( UNHEX( '암호화된 데이터' ),  SHA2('암호키',512) )



참고로 MySQL 에서는 SHA2 함수가 먹히지 않더군요~


mysql 에서는 SHA2 대신에 그냥 비밀번호를 사용하거나 md5 를 사용하면 될 것 같습니다.

SHA2('암호키', 512) => MD5('암호키')

그리고 이유는 잘 모르겠지만 phpMyAdmin 에서는 복호화가 제대로 동작을 안합니다.


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,