LVMを使ったディスクの切り出し
2012/01/22(日) 17:15 NetBSD はてブ情報 はてブに登録 はてブ数

KVMつかってqcow形式使ってたらどうも調子悪いので、達人おすすめのLVMからパーティションを切り出して使う方式に切り替えようと思い立った。

3TBのUSB HDDをつないでそいつを切り出して使おうって寸法。Windowsでの利用を前提として売られている市販品です。

手順は次のようになります。
  • fdisk or gparted
  • PV (pvcreate)
  • LG (vgcreate)
  • LV (lvcreate)
  • mkfs (NetBSDでマウントして)
LinuxのLVMの操作の基本的操作を書いただけですが、Linuxをまるでしらない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.00m
vgdisplayに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/