*CentOS7 [#p9ac7eba]
[[CentOS:+http://www.centos.org/]]
RHEL7のクローン。2014/07/07に7系統の初版が公開。
今までのCentOS6系統と比べて、色々とお作法が変わっている。
*qemu-img [#k2d7581e]
[[RedHat 仮想化ガイド>+https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/5/html/Virtualization/sect-Virtualization-Tips_and_tricks-Using_qemu_img.html]]
KVMディスクイメージ(仮想HDD)を操作する為のコマンド。
ディスクイメージの拡大・縮小、空HDDの追加などを行える。
~
*変更点メモ [#o997a66e]
&size(16){&font(b){●iptables};};
処理がもの凄く高速化している。
今までは、新しいpermit/denyルールを追加する際には全ルールを再適用する必要があったが、
CentOS7搭載の物からはダイナミックにルール変更が可能な為、
必要な箇所のみ追記/削除が可能になっている。

*仮想HDDの拡張 [#caf8ee36]
仮想HDDの容量拡張をおこなっても、ゲストOS側のパーティションは変更前の設定になっている。
その為、容量拡張を行った後にゲストOS側でもパーティションのリサイズをする必要がある。
例えば、仮想HDDの容量を100GB増やす場合は以下の様になる。
 # qemu-img info gest-os.img
 image: gest-os.img
 file format: qcow2
 virtual size: 120G (128849018880 bytes)
 disk size: 49G
 cluster_size: 65536
 
 # qemu-img resize gest-os.img +100G
~

&size(16){&font(b){●tmpfiles};};
今までは、/var/runにディレクトリを作成して再起動をかけても、作成したディレクトリが残っていたのだが、
CentOS7からは、再起動すると&font(b){/var/runが初期化};される様になった。
独自に作成した/var/run内ディレクトリを残すようにする場合、
/etc/tmpfiles.d内にコンフィグを追加すれば可能。
詳しい書式は[[こちら:+http://www.freedesktop.org/software/systemd/man/tmpfiles.d.html]]参照
 # 書式
 [d:ディレクトリ] [作成するディレクトリ] [4桁パーミッション] [所有ユーザ] [所有グループ] [-:最後に付ける]
*仮想HDDの追加 [#s9cac1b3]
仮想HDDを作成する場合は、ホストOSで仮想HDDを作成した後にゲストOSのHDDマウントポイントを書き換え、
ゲストOS側でフォーマットをする。
-100GBの仮想HDDを追加
-追加する仮想HDDは"/var/libvirt/images/hdd-2nd.img"
-ゲストOSの設定ファイルは"/etc/libvirt/qemu/gest.xml"

 # cd /var/libvirt/images
 # qemu-img create -f qcow2 hdd-2nd.img 100G
 # vi /etc/libvirt/qemu/gest.xml
 ---
 仮想HDDを追加マウントする為、
 以下の内容をxmlファイルの<devices>ディレクティブ配下に追加する
 追加する時は<target dev='***'>や<address slot='***' fonction='***'>等が、
 他のxml要素と被らない様にする。
 
 -----
 
 #zabbix用PIDディレクトリを作成する場合
 [root@hoge tmpfiles.d]# cat zabbix.conf 
 # zabbix runtime directory
 d /var/run/zabbix 0750 zabbix zabbix -
 下の記述方法では、追加する仮想HDDをゲストOSの/dev/vdb、
 IDEコントローラをPCIスロット10(0x0A)に割り当てている。
 ===
 <disk type='file' device='disk'>
   <driver name='qemu' type='qcow2'/>
   <source file='/var/libvirt/images/hdd-2nd.img'/>
   <target dev='vdb' bus='virtio'/>
   <address type='pci' domain='0x0000' bus='0x00' slot='0x0A' function='0x0'/>
 </disk>
仮想HDDを追加した後は、
ゲストOS側から仮想HDDをフォーマットする。
~

&size(16){&font(b){●systemctl};};
プロセスの起動が、initからsystemdに変更された。
また、プログラムの自動起動(chkconfig)もsystemdで一元管理出来るようになった。
よって、使用するコマンドがsystemctlに変更になった(´・ω:;.:...
※initとchkconfigは残っているが、非推奨らしい
*仮想HDDの圧縮 [#t2d45c00]
ゲストOS内でファイルの書き込み削除を繰り替えすと、仮想HDDでqcow2を利用している場合、
0を書き込まれた空領域に変換されてしまい、ホストOSから見た仮想HDDが膨張していく。
仮想HDDを圧縮する場合は、この0で埋められた箇所を切り詰める作業となる。
 
ただし、圧縮した後はゲストOSの書き込み(iowait)に負荷がかかる為、
敢えて圧縮しないで運用するのも一つの手である。
-圧縮前後ともに、qcow2形式とする
-圧縮前の仮想HDDは"/var/libvirt/images/hdd.img"
-圧縮後の仮想HDDは"/var/libvirt/images/hdd.comp.img"

こちらのサイト様が詳しくまとめてある -> [[とみぞーノート:+http://wiki.bit-hive.com/tomizoo/pg/systemd%20%26%20systemctl]]
 # qemu-img convert -c -f qcow2 -O qcow2 /var/libvirt/images/hdd{,.comp}.img"
~

-コマンド対応表
|&font(b){CentOS7};|&font(b){CentOS6};|
|# systemctl enable zabbix_agentd.service |# chkconfig zabbix_agentd on|
|# systemctl disable zabbix_agentd.service |# chkconfig zabbix_agentd off|
|# systemctl load zabbix_agentd.service |# chkconfig --add zabbix_agentd|
|# systemctl -l |# chkconfig --list|
|# systemctl start zabbix_agentd.service |# /etc/init.d/zabbix_agentd start|
|# systemctl stop zabbix_agentd.service |# /etc/init.d/zabbix_agentd stop|
|# systemctl restart zabbix_agentd.service |# /etc/init.d/zabbix_agentd restart|
*仮想HDDの縮小 [#h0c35457]
仮想HDD領域の容量縮小をするには様々の方法が存在するのだが、今回は手順が多いが確実に縮小出来る方法を行う。
ただし、縮小前のゲストOSが、現在割り当てられている仮想HDD容量の限界まで使っている場合は、
容量縮小をする事が出来ない場合もある。
 
大まかな手順は下記の通り
+縮小後容量で仮想HDDを作成
+GParted LiveCDを使って、ゲストOSを起動(GPartedを起動)
+GPartedを使って縮小前仮想HDDのパーティションを縮小後のパーティションにリサイズ(容量縮小)
+GPartedのコンソールから、ddコマンドで縮小前仮想HDDを縮小後仮想HDDへダンプする
+GPartedから、縮小後仮想HDDのパーティションをリサイズ(容量拡張)
+ホストOSから縮小前仮想HDDと縮小後仮想HDDを入れ替える
+縮小後仮想HDDを圧縮する

 
他に前提として下記の通りとする
-縮小前の仮想HDDを150GB、縮小後の仮想HDDを100GBとする
-kvm-libvirtから読み込ませる為に、GPartedはPAE非採用版(gparted-live-0.21.0-1-i586.iso)を使う
-ゲストOSの設定ファイルは"/etc/libvirt/qemu/gest.xml"
-GPartedのLiveCDは"/var/libvirt/images/gparted.iso"
-縮小前の仮想HDD(150GB)は"/var/libvirt/images/hdd.img"、マウントポイントは"/dev/vda"
-縮小後の仮想HDD(100GB)は"/var/libvirt/images/hdd.dec.img"、マウントポイントは"/dev/vdb"

~
----
&font(b){1). 縮小後の仮想HDD作成};
[[仮想HDDの追加>#s9cac1b3]]と同じ操作を行う。
 # cd /var/libvirt/images/
 # qemu-img create -f qcow2 hdd.dec.img 100G

 
&font(b){2). 仮想HDDのリサイズ};
後の作業でHDDのダンプをする為に、縮小前のHDDの使用領域を&font(b){縮小後のHDD領域よりも少なく};する。
例えば、150GBの仮想HDDから100GBの仮想HDDへ縮小する場合、パーティションのリサイズは95GB程度にする。
あと、GPartedから仮想HDDを操作する為に、[[縮小後仮想HDDの追加>#s9cac1b3]]と、
下の設定をゲストOS設定ファイル(xml)の<devices>ディレクティブ配下に追加する。
他のアドレス情報である<target>や<address>についても他と被らない様に変更する。
さらに、<os>ディレクティブのbootデバイスもcdromに変更する。

 # vi /etc/libvirt/qemu/gest.xml
 ---
 <os>
   <type arch='x86_64' machine='centos'>hvm</type>
   <root>/dev/vda</root>
   <boot dev='cdrom'/>
 </os>
 ===
 <disk type='file' device='cdrom'>
   <driver name='qemu' type='raw'/>
   <source file='/var/libvirt/images/gparted.iso'/>
   <target dev='hdc' bus='ide'/>
   <readonly/>
   <address type='drive' controller='0' bus='1' target='0' unit='0'/>
 </disk>
 
&font(b){3). 仮想HDDのリサイズ};
GParted上から縮小魔仮想HDD上のパーティションをリサイズする。
GUIを見れば使い方はわかるので詳細説明は割愛。

 
&font(b){4). 仮想HDDのダンプ};
GParted上のコンソールから、縮小前仮想HDDの内容を縮小後仮想HDDへダンプする
GPartedのrootへログインする為には、rootのパスワード変更をする必要がある。
ちなみに、GPartedの初期ログインユーザは"user"、パスワードは"live"になっている。

 $ sudo passwd root
   Enter new UNIX password:
   Retype new UNIX password:
 $ su -
   Password:
 # dd if=/dev/vda of=/dev/vdb bs=4096

 
&font(b){5). 仮想HDDのリサイズ};
縮小後仮想HDD容量はダンプの都合でパーティションを少なくしている為、
縮小後仮想HDD容量の最大値まで利用出来るように、パーティションを切り直す。
パーティションを切り直した後はGPartedを終了する。

 
&font(b){6). ホストOSから縮小前仮想HDDと縮小後仮想HDDを入れ替える};
ゲストOSの起動HDDが縮小前仮想HDDになっている為、縮小後仮想HDDに変更を行う。
ひとまず、仮想HDDの入れ替えで対応し、縮小後仮想HDDの起動が問題ない事を確認でき次第、
縮小前仮想HDDを削除する。

 # cd /var/libvirt/images
 # mv hdd.img hdd.original.img
 # mv hdd.dec.img hdd.dec.img

 
&font(b){7). 縮小後仮想HDDの圧縮};
仮想HDDの中身をddした時に、仮想HDDの空領域にも0が書き込まれている為、
ホストOSから見た仮想HDDの容量が最大値まで増加している。
0パディングされか箇所が勿体ないので、[[仮想HDDの圧縮>#t2d45c00]]を行う。

 
&font(b){0). おまけ};
qemu-imgコマンドだけでリサイズする場合、
ゲストOS上でデフラグを掛けた上で以下のコマンドでも出来る。
この時、コマンドの仕様を回避する為に'-'を二回入力する必要がある点に注意。
 # qemu-img resize hdd.img -- -50GB