Linux

Linux partedで2TB以上のディスクをLVMとして追加

*記事内に商品プロモーションを含む場合があります

Linuxで2TB以上のディスクを使用する場合、fdiskでパーティション作成するとエラーになるのでpartedコマンドを使う必要があります。

LVM(Logical Volume Manager)を使って、ディスク(ボリューム)を管理したほうが、その後の拡張などが楽になります。

この記事では具体的なコマンド例を使って説明します。

Virtual Box上の Ubuntu22.04で実行確認しました。

間違って既存の環境を壊す可能性があるので、本番環境で行う前に仮想OSで練習してみることをお勧めします。

事前の確認作業

現在の状態を確認します。

30GBで動作しているUbuntuに、物理的にディスクを追加した直後の状態です。

パーティションの作成、フォーマット、マウントなどしていない状態。

パーティション構成を把握します。
tmpfs は一時ファイルを格納するための仕組みなので、特に気にしないでいいです。

$
$ df -h
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              198M  1.1M  197M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   14G  7.0G  6.0G  54% /
tmpfs                              989M     0  989M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          2.0G  245M  1.6G  14% /boot
tmpfs                              198M  4.0K  198M   1% /run/user/1000

parted -l で確認。

$
$ sudo parted -l

Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 32.2GB ★OS領域など
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  2097kB  1049kB                     bios_grub
 2      2097kB  2150MB  2147MB  ext4
 3      2150MB  32.2GB  30.1GB


Error: /dev/sdb: unrecognised disk label ★未使用状態
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 10.7GB ★10GBを増設
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 15.0GB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:

Number  Start  End     Size    File system  Flags
 1      0.00B  15.0GB  15.0GB  ext4

/dev/sdb: unrecognised disk label ★未使用状態

/dev/sdX <- これデバイス名が重要

ディスクのメーカーなどでデバイス名が変わることがありますが、基本的に 以下のように 末尾が、”a”,”b”,”c”,”d” とアルファベット順に割り当てられていきます。

/dev/sda => /dev/sdb => /dev/sdc => /dev/sdd …

partedでパーティション作成

何か変更したら、正しく反映されているか必ず確認しましょう。

以降の手順では、どこが変更になったかを記載しています。

partedでパーティション作成

partedで デバイス名(/dev/sdx)を指定して起動します。

$
# parted /dev/sdb
GNU Parted 3.4
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) p
Error: /dev/sdb: unrecognised disk label
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

mklabelでGPT形式に設定

mklabelでGPT形式に設定します。

$
(parted) mklabel gpt   ★gpt を指定する

(parted) p
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt  ★gptが設定された
Disk Flags:
Number  Start  End  Size  File system  Name  Flags

パーティション作成

mkpartでパーティションを作成します。

Partition name(パーティションの名前)とFile system type(ファイルシステムの種類)は空白で問題なし。

(parted) mkpart
Partition name?  []?        ★空白
File system type?  [ext2]?  ★空白
Start? 0% ★"0%"を指定
End? 100% ★"100%"を指定。フルに1つのパーティションに割り当てる。

(parted) p
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  10.7GB  10.7GB  ext2  ★割り当たった

LVMに設定

パーティションをLVMに設定します。

$
(parted) set 1 lvm on

(parted) p
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  10.7GB  10.7GB  ext2               lvm ★Flagsがlvmになった

partedを終了。q(quit)で終了

$
(parted) q
Information: You may need to update /etc/fstab.

LVMを作成

PV・VG・LVを作成します。

PV(物理ボリューム)を作成

#
# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.

# pvs
  PV         VG        Fmt  Attr PSize   PFree
  /dev/sda3  ubuntu-vg lvm2 a--  <28.00g  14.00g
  /dev/sdb1            lvm2 ---  <10.00g <10.00g

VG(ボリューム・グループ)を作成

#
# vgcreate data-vg /dev/sdb1
  Volume group "data-vg" successfully created

# vgs
  VG        #PV #LV #SN Attr   VSize   VFree
  data-vg     1   0   0 wz--n- <10.00g <10.00g
  ubuntu-vg   1   1   0 wz--n- <28.00g  14.00g

LV(論理ボリューム)を作成

#
# lvcreate -n data-lv  -l 100%FREE data-vg
  Logical volume "data-lv" created.

# lvs
  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  data-lv   data-vg   -wi-a----- <10.00g
  ubuntu-lv ubuntu-vg -wi-ao---- <14.00g

#
# lvdisplay
  --- Logical volume ---
  LV Path                /dev/data-vg/data-lv
  LV Name                data-lv
  VG Name                data-vg
  LV UUID                awlROy-BeBK-XkIo-AAq4-fuBd-MwN4-7TaGOV
  LV Write Access        read/write
  LV Creation host, time ubuntu2204sv, 2022-10-01 09:20:39 +0000
  LV Status              available
  # open                 1
  LV Size                <10.00 GiB
  Current LE             2559
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/ubuntu-vg/ubuntu-lv
  LV Name                ubuntu-lv
  VG Name                ubuntu-vg
  LV UUID                7h6Ldp-mMbT-BlFN-s203-fZki-grw3-u7Rham
  LV Write Access        read/write
  LV Creation host, time ubuntu-server, 2022-07-16 04:27:48 +0000
  LV Status              available
  # open                 1
  LV Size                <14.00 GiB
  Current LE             3583
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1
 

フォーマット

lsblkコマンドを利用してデバイス・マッパーを確認します。

xfsでフォーマットします。

#
# mkfs.xfs /dev/mapper/data--vg-data--lv

meta-data=/dev/mapper/data--vg-data--lv isize=512    agcount=4, agsize=655104 blks
         =              sectsz=512   attr=2, projid32bit=1
         =              crc=1        finobt=1, sparse=1, rmapbt=0
         =              reflink=1    bigtime=0 inobtcount=0
data     =              bsize=4096   blocks=2620416, imaxpct=25
         =              sunit=0      swidth=0 blks
naming   =version 2     bsize=4096   ascii-ci=0, ftype=1
log      =internal log  bsize=4096   blocks=2560, version=2
         =              sectsz=512   sunit=0 blks, lazy-count=1
realtime =none          extsz=4096   blocks=0, rtextents=0

マウント

デバイスマッパーは、/dev/dm-(数字) というカーネルが管理するデバイスを /dev/mapper/(マップ名) にマッピングします。

ls -la /dev/mapper で確認。

マウントポイントを作成し、mountコマンドでマウント。

#
# mkdir /data-lvm

# mount  /dev/mapper/data--vg-data--lv /data-lvm/
$
$ df -h
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              198M  1.1M  197M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   14G  7.0G  6.0G  54% /
tmpfs                              989M     0  989M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          2.0G  245M  1.6G  14% /boot
tmpfs                              198M  4.0K  198M   1% /run/user/1000
/dev/mapper/data--vg-data--lv       10G  104M  9.9G   2% /data-lvm

OS起動時の自動マウント設定(fstab変更)

OS起動時の自動マウントの設定を行います。

mountコマンドでのマウントは、OS停止すると解除されます。

永続化するために、/etc/fstab に設定を追加します。

#
# vi  /etc/fstab

/dev/mapper/data--vg-data--lv  /data-lvm/   xfs defaults   0 0
 ↑★1行追加

あとがき

ディスクの管理方法もコマンドも少しずつ変わってきていますね。

LVMで作成した領域は、簡単に領域を拡張することができます。

昔は、ディスク容量の増強は大変な作業でした。
今ではLVMでディスクを管理しているので、作業が楽になりましたね。

Virual Boxでディスクを追加する方法は以下です。

VirtualBox ディスク追加方法
VirtualBoxで仮想マシンにハードディスクを追加する方法VirtualBox上の仮想マシンにハードディスクを追加する方法を紹介します。 VirtualBoxにディスクの追加手順 (...
Linuxでfioを使ってディスクの性能を測る(HDD,SSD)Linuxでfioを使ってディスク(HDD,SSD)の性能を測る方法を紹介します。 fioは以下のようなディスク関連の性能調査やチ...