LVMを使ったディスクの切り出し
KVMつかってqcow形式使ってたらどうも調子悪いので、達人おすすめのLVMからパーティションを切り出して使う方式に切り替えようと思い立った。
3TBのUSB HDDをつないでそいつを切り出して使おうって寸法。Windowsでの利用を前提として売られている市販品です。
手順は次のようになります。
3TBのUSB HDDをつないでそいつを切り出して使おうって寸法。Windowsでの利用を前提として売られている市販品です。
手順は次のようになります。
- fdisk or gparted
- PV (pvcreate)
- LG (vgcreate)
- LV (lvcreate)
- mkfs (NetBSDでマウントして)
■ fdisk or parted
まずはfdiskですね。USBディスクは/dev/sddで見えています。root@t105:~# fdisk /dev/sdd WARNING: GPT (GUID Partition Table) detected on '/dev/sdd'! The util fdisk doesn't support GPT. Use GNU Parted. WARNING: The size of this disk is 3.0 TB (3000592982016 bytes). DOS partition table format can not be used on drives for volumes larger than (2199023255040 bytes) for 512-byte sectors. Use parted(1) and GUID partition table format (GPT). WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): p Disk /dev/sdd: 3000.6 GB, 3000592982016 bytes 256 heads, 63 sectors/track, 363376 cylinders Units = cylinders of 16128 * 512 = 8257536 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sdd1 1 266306 2147483647+ ee GPT Command (m for help):あらま。3TBだとfdiskでは扱えないようです。partedを使えとのことなので、そのとおり使ってみます。
root@t105:~# parted /dev/sdd GNU Parted 2.3 Using /dev/sdd Welcome to GNU Parted! Type 'help' to view a list of commands. (parted)まずはヘルプを見てみます。
(parted) help align-check TYPE N check partition N for TYPE(min|opt) alignment check NUMBER do a simple check on the file system cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER copy file system to another partition help [COMMAND] print general help, or help on COMMAND mklabel,mktable LABEL-TYPE create a new disklabel (partition table) mkfs NUMBER FS-TYPE make a FS-TYPE file system on partition NUMBER mkpart PART-TYPE [FS-TYPE] START END make a partition mkpartfs PART-TYPE FS-TYPE START END make a partition with a file system move NUMBER START END move partition NUMBER name NUMBER NAME name partition NUMBER as NAME print [devices|free|list,all|NUMBER] display the partition table, available devices, free space, all found partitions, or a particular partition quit exit program rescue START END rescue a lost partition near START and END resize NUMBER START END resize partition NUMBER and its file system rm NUMBER delete partition NUMBER select DEVICE choose the device to edit set NUMBER FLAG STATE change the FLAG on partition NUMBER toggle [NUMBER [FLAG]] toggle the state of FLAG on partition NUMBER unit UNIT set the default unit to UNIT version display the version number and copyright information of GNU Parted (parted)状態を表示させるprintを実行してみます。
(parted) print Model: I-O DATA HDCA-U (scsi) Disk /dev/sdd: 3001GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 17.4kB 134MB 134MB Microsoft reserved partition msftres 2 135MB 3001GB 3000GB ntfs Basic data partition (parted)Windows向けにあらかじめ準備されていたパーティション1と2があります。まったく使わないので削除してしまいましょう。
ただし、この操作は実行したとたんに反映されます。戻せませんのでご注意。
(parted) rm 2 (parted) rm 1 (parted)なんという寡黙なコマンド。ちゃんと消えているか確認してみます。
(parted) p Model: I-O DATA HDCA-U (scsi) Disk /dev/sdd: 3001GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags (parted)はい。見事に消えています。
では、LVM用のパーティションを作りましょう。
単位をMiBにします。参考にしたWebページがそうしていたからですけど。
(parted) unit MiBパーティションのサイズを確認します。 Disk /dev/sdd: 2861588MiBと書かれている部分をみると全体が2861588MiBだとわかります。この数字を覚えておきます。
(parted) p Model: I-O DATA HDCA-U (scsi) Disk /dev/sdd: 2861588MiB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags (parted)いよいよmkpartでパーティションを作ります。パーティションタイプはprimaryで、パーティションのSTARTとENDをそれぞれ1と(先ほど覚えておいた)2861588にします。
ちなみに、スタートを1にしているのは0にすると Warning: The resulting partition is not properly aligned for best performance. という警告が出たからです。
(parted) mkpart primary 1 2861588 (parted)確認してみます。
(parted) p Model: I-O DATA HDCA-U (scsi) Disk /dev/sdd: 2861588MiB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 1.00MiB 2861588MiB 2861587MiB primary (parted)作成したパーティション1をLVMにセットします。ちょっと呪文っぽいset 1 lvm onというコマンドです。mkpartのhelpにもうすこし書いて欲しいものです。
(parted) set 1 lvm on (parted)確認してみましょう。Flagsにlvmと記載されています。
(parted) p Model: I-O DATA HDCA-U (scsi) Disk /dev/sdd: 2861588MiB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 1.00MiB 2861588MiB 2861587MiB primary lvm (parted)そういえば、そもそもGPTとして見えていたので、mklabelはしませんでした。した方がよかったかな。
■ PVを作る
PVを作るコマンドはpvcreateです。先ほど作ったパーティションをPVにします。root@t105:~# pvcreate /dev/sdd1 Physical volume "/dev/sdd1" successfully created確認のコマンドはpvscanです。一行目のものはシステムディスクのPVで二行目のものが先ほど作ったPVです。
root@t105:~# pvscan PV /dev/sda3 VG t105 lvm2 [1.82 TiB / 132.00 MiB free] PV /dev/sdd1 lvm2 [2.73 TiB] Total: 2 [4.55 TiB] / in use: 1 [1.82 TiB] / in no VG: 1 [2.73 TiB]
■ VGを作る
vgcreateでVGをつくります。KVMのVMを置く場所なのでVG-vmpoolという名前にします。
引数の-s 64mはエクステントの指定です。VGに作成可能なエクステント数の最大は65536という制限があるので、ディスクのサイズを最大エクステント数つまり65536で割ればエクステントサイズが求まるわけです。で、参考にしたWebページに早見表があって2TBだと32MBで4TBだと64MBだそうな。こいつは3TBだから64MBにしとけば(ムダは出るかもしれんが)安心でしょう。
root@t105:~# vgcreate -s 64m VG-vmpool /dev/sdd1 Volume group "VG-vmpool" successfully created作成したVGを表示します。vgdisplayというコマンドです。vgscanじゃないところがなんとも。
root@t105:~# vgdisplay -C VG #PV #LV #SN Attr VSize VFree VG-vmpool 1 0 0 wz--n- 2.73t 2.73t t105 1 2 0 wz--n- 1.82t 132.00mvgdisplayにVG名を与えると詳しい情報が出ます。
root@t105:~# vgdisplay VG-vmpool --- Volume group --- VG Name VG-vmpool System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 2.73 TiB PE Size 64.00 MiB Total PE 44712 Alloc PE / Size 0 / 0 Free PE / Size 44712 / 2.73 TiB VG UUID sfxf8p-nCr7-suHe-JxpA-Sk9C-AsBa-s2TNE5
■ LVを作る
VG-vmpoolからLVを切り出します。1TiBのサイズで名前をvol1とします。root@t105:~# lvcreate -L 1TiB -n vol1 VG-vmpool Logical volume "vol1" createdもうひとつvol2という名前で切り出してみます。
root@t105:~# lvcreate -L 1TiB -n vol2 VG-vmpool Logical volume "vol2" created確認してみます。vgdisplayをもう一度使います。lvdisplayがあればわかりやすいのに。
root@t105:~# vgdisplay -v VG-vmpool Using volume group(s) on command line Finding volume group "VG-vmpool" --- Volume group --- VG Name VG-vmpool System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 2.73 TiB PE Size 64.00 MiB Total PE 44712 Alloc PE / Size 32768 / 2.00 TiB Free PE / Size 11944 / 746.50 GiB VG UUID sfxf8p-nCr7-suHe-JxpA-Sk9C-AsBa-s2TNE5 --- Logical volume --- LV Name /dev/VG-vmpool/vol1 VG Name VG-vmpool LV UUID lmE2r2-GvBd-bBUO-19VF-9JRs-XGSz-XsG0hM LV Write Access read/write LV Status available # open 0 LV Size 1.00 TiB Current LE 16384 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 251:2 --- Logical volume --- LV Name /dev/VG-vmpool/vol2 VG Name VG-vmpool LV UUID FvDTk8-TvaJ-cDcZ-7Rq1-D7ef-2M3v-PmdDzx LV Write Access read/write LV Status available # open 0 LV Size 1.00 TiB Current LE 16384 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 251:3 --- Physical volumes --- PV Name /dev/sdd1 PV UUID 228TBz-9i9u-e0ie-xoWe-1TD5-CX31-P4IfuP PV Status allocatable Total PE / Free PE 44712 / 11944 root@t105:~#これで、/dev/mapperの下にvol1, vol2に相当するパーティションができています。
root@t105:~# ls -l /dev/mapper total 0 crw------- 1 root root 10, 236 2012-01-18 19:27 control lrwxrwxrwx 1 root root 7 2012-01-18 19:26 t105-root -> ../dm-0 lrwxrwxrwx 1 root root 7 2012-01-18 19:27 t105-swap_1 -> ../dm-1 lrwxrwxrwx 1 root root 7 2012-01-18 19:27 VG--vmpool-vol1 -> ../dm-2 lrwxrwxrwx 1 root root 7 2012-01-18 19:27 VG--vmpool-vol2 -> ../dm-3/dev/mapper/VG--vmpool-vol1は普通のディスクとして扱うことができるので、mke2fsして使うなり、KVMのゲストOS向けのディスクとして見せるなり、お好きにお使いください。
- TB-URL http://www.tokuda.net/diary/0767/tb/