ubichupas.net

仮想マシンに追加したディスクをsystemdでマウントする

ファイル共有サーバを仮想マシンで構築するとき 共有フォルダ毎にディスクイメージを分離しておけば フルバックアップが容易になります。

ディスクの追加

仮想マシンを一旦停めてvirsh editでドメインXMLに新しいディスクを書き足します。 元からある<disk>を参考に書けばよいのですけど、 <address>は省略して自動補完させるのがよいでしょう。
ポイントは<target dev='vda'><target dev='vdb'>に変えることです。 それで追加したディスクが仮想マシンから/dev/vdbとして認識されます。

kvm-host
[root@localhost ~]# virsh shutdown centos-smb
ドメイン centos-smb はシャットダウン中です

[root@localhost ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/smb-storage.qcow2 500G
Formatting '/var/lib/libvirt/images/smb-storage.qcow2', fmt=qcow2 size=536870912000 encryption=off cluster_size=65536 lazy_refcounts=off

[root@localhost ~]# virsh edit centos-smb

    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/centos-smb.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/smb-storage.qcow2'/>
      <target dev='vdb' bus='virtio'/>
    </disk>

[root@localhost ~]# virsh start centos-smb
ドメイン centos-smb が起動されました

ディスクの初期化

qemu-imgコマンドで作成したばかりのディスクイメージは フォーマットされていない状態なので、仮想マシン上でその辺りの操作を行います。 まずfdiskコマンドでディスク全体を1つのパーティションとし、 次にmkfsコマンドでRHEL7の標準ファイルシステムであるXFSでフォーマットします。

kvm-guest
[root@centos-smb ~]# fdisk /dev/vdb

コマンド (m でヘルプ): g
Building a new GPT disklabel (GUID: 06B3F4A8-8941-491A-BFB2-88E4D51EAE09)

コマンド (m でヘルプ): n
パーティション番号 (1-128, default 1): 1
First sector (2048-1048575966, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-1048575966, default 1048575966):
Created partition 1

コマンド (m でヘルプ): p

Disk /dev/vdb: 536.9 GB, 536870912000 bytes, 1048576000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: gpt


#         Start          End    Size  Type            Name
 1         2048   1048575966    500G  Linux filesyste


コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。


[root@centos-smb ~]# mkfs.xfs /dev/vdb1
meta-data=/dev/vdb1              isize=512    agcount=4, agsize=32767935 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=131071739, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=63999, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

/dev/vdb1がマウントできることを確認して一段落です。

kvm-guest
[root@centos-smb ~]# mkdir /mnt/storage
[root@centos-smb ~]# mount -t xfs /dev/vdb1 /mnt/storage/
[root@centos-smb ~]# df -lh
ファイルシス        サイズ  使用  残り 使用% マウント位置
/dev/mapper/cl-root   8.0G  1.1G  7.0G   13% /
devtmpfs              1.9G     0  1.9G    0% /dev
tmpfs                 1.9G     0  1.9G    0% /dev/shm
tmpfs                 1.9G  8.3M  1.9G    1% /run
tmpfs                 1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/vda1            1014M  138M  877M   14% /boot
tmpfs                 380M     0  380M    0% /run/user/0
/dev/vdb1             500G   33M  500G    1% /mnt/storage

ディスクの自動マウント

仮想マシンを再起動したときに自動マウントしたいとなれば /etc/fstabに書くのが従来の常識でした。 しかしCentOS 7からはsystemdでディスクのマウントも管理します。 マウントポイントを書いた以下のような.mountファイルを用意しましょう。

/etc/systemd/system/mnt-storage.mount
[Unit]
Description=Mount Samba Storage

[Mount]
What=/dev/vdb1
Where=/mnt/storage/
Type=xfs
Options=defaults

[Install]
WantedBy=multi-user.target

自動マウントはサービスの自動起動と同じようにsystemctl enableで有効になります。 start/stopがマウント/アンマウントに対応しており非常に分かりやすいです。

kvm-guest
[root@centos-smb ~]# systemctl enable mnt-storage.mount
Created symlink from /etc/systemd/system/multi-user.target.wants/mnt-storage.mount to /etc/systemd/system/mnt-storage.mount.

[root@centos-smb ~]# systemctl start mnt-storage.mount

[root@centos-smb ~]# systemctl status mnt-storage.mount
● mnt-storage.mount - Mount Samba Storage
   Loaded: loaded (/etc/systemd/system/mnt-storage.mount; enabled; vendor preset: disabled)
   Active: active (mounted) since Mon 2018-01-08 22:26:46 JST; 1 months 24 days ago
    Where: /mnt/storage
     What: /dev/vdb1

Jan 08 22:26:46 centos-smb systemd[1]: Mounting Mount Samba Storage...
Jan 08 22:26:46 centos-smb systemd[1]: Mounted Mount Samba Storage.

[root@centos-smb ~]# systemctl list-units --type=mount
UNIT                    LOAD   ACTIVE SUB     DESCRIPTION
-.mount                 loaded active mounted /
boot.mount              loaded active mounted /boot
dev-hugepages.mount     loaded active mounted Huge Pages File System
dev-mqueue.mount        loaded active mounted POSIX Message Queue File System
mnt-storage.mount       loaded active mounted Mount Samba Storage
run-user-0.mount        loaded active mounted /run/user/0
sys-kernel-config.mount loaded active mounted Configuration File System
sys-kernel-debug.mount  loaded active mounted Debug File System

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

8 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

例えばディスクがマウントさせれていない場合はSambaサービスを起動させないなどの 依存関係も書けるでしょうし、systemdは奥が深いです。

0 件のコメント: