🦔
LVMによるLinuxディスク管理
目的
VirtualBox上のLinux仮想環境においてLVM(Logical Volume Manager)を用いた柔軟なディスク管理方法の解説である。
- LVM...物理ストレージを抽象化し、柔軟なディスク運用を可能にするLinuxの機能
- 仮想環境を使って安全に試すことができる
VirtualBox
- VirtualBox...オラクルが提供する無料の仮想化ソフトウェア
- 仮想マシン(VM)を作成し、他のOSをインストール・利用できる
機能
-
スナップショット
仮想マシンの状態を保存し、あとでその状態に戻せる -
シームレスモード
ゲストOSをホストOS上のアプリのように扱える -
共有フォルダ/クリップボード共有
ホストとの連携がスムーズにできる
VirtualBoxの使い方(仮想マシン作成)
仮想マシンの作成
- Oracle VM VirtualBoxマネージャーを起動
- 「新規」ボタンを押す
- 設定を入力:
- 名前:
debian-lvm
など - タイプ:
Linux
- バージョン:
Debian (64-bit)
- メモリサイズ: 1024MB以上
- 名前:
- 仮想ハードディスクの作成
- タイプ: VDI(可変サイズ or 固定サイズ)
- 容量: 10GB以上推奨
LVM構成
概要:LVMの3層構造
+------------------+ +-----------------------+ +--------------------+
| /dev/sdX1, sdY1… | ===> | ボリュームグループ VG | ===> | 論理ボリューム LV |
+------------------+ +-----------------------+ +--------------------+
PV (物理ボリューム) VG (グループ化) LV (用途に応じて分割)
コマンド群
パーティション作成(fdisk)
- fdiskコマンドで実行されるシェル内で下記を行う
# デバイスの確認
sudo fdisk -l
# /dev/sdb にパーティションを作成
sudo fdisk /dev/sdb
# fdisk 内での操作手順(LVM用):
Command (m for help): n
Command (m for help): t
Hex code: 8e
Command (m for help): w
確認:
sudo fdisk -l /dev/sdb
物理ボリュームの作成
# 書式:pvcreate <パーティション...>
sudo pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
sudo pvdisplay
ボリュームグループの作成と管理
# 作成 書式:vgcreate <VG名> <PVパス...>
sudo vgcreate lvg-share /dev/sd{b,c,d,e}1
sudo vgdisplay
# スキャン 書式:vgscan(すべてのVGをスキャン)
sudo vgscan
# 名前変更 書式:vgrename <旧VG名> <新VG名>
sudo vgrename lvg-share lvg-data
# VG削除 書式:vgremove <VG名>
sudo vgremove lvg-data
論理ボリュームの作成と管理
# 論理ボリューム作成 書式:lvcreate --name <LV名> --size <サイズ> <VG名>
sudo lvcreate --name public --size 18G lvg-data
sudo lvdisplay
# 名前変更 書式:lvrename <VG名> <旧LV名> <新LV名>
sudo lvrename lvg-data public shared
# LV削除
sudo lvremove /dev/lvg-data/shared
フォーマットとマウント
# 書式: mkfs.<fstype> <デバイスパス>
sudo mkfs.ext4 /dev/lvg-data/shared
sudo mkdir /mnt/shared
# 書式: mount <デバイスパス> <マウントポイント>
sudo mount /dev/lvg-data/shared /mnt/shared
df -h
永続化設定(/etc/fstab)
# 書式: blkid <デバイスパス>
sudo blkid /dev/lvg-data/shared
# 出力例: /dev/lvg-data/shared: UUID="a1b2c3d4-e5f6-7890-1234-56789abcdef0" TYPE="ext4"
/etc/fstab
に追記:
UUID=a1b2c3d4-e5f6-7890-1234-56789abcdef0 /mnt/shared ext4 defaults 0 2
よく使う表示系コマンド
pvs
vgs
lvs
# 書式: lvdisplay <LVパス>、vgdisplay <VG名>、pvdisplay <PVパス>
pvdisplay /dev/sdb1
vgdisplay lvg-data
lvdisplay /dev/lvg-data/shared
付録:スナップショット・縮小・トラブル対処
スナップショット
# 作成 書式:lvcreate --size <サイズ> --snapshot --name <スナップショット名> <対象LVパス>
sudo lvcreate --size 1G --snapshot --name shared_snap /dev/lvg-data/shared
# 復元 書式:lvconvert --merge <スナップショットLVパス>
sudo lvconvert --merge /dev/lvg-data/shared_snap
# 削除 書式:lvremove <LVパス>
sudo lvremove /dev/lvg-data/shared_snap
論理ボリュームの拡張・縮小
# 拡張
## 書式:lvextend -L +<追加サイズ> <LVパス>
sudo lvextend -L +5G /dev/lvg-data/shared
## 書式:resize2fs <LVパス> または resize2fs <LVパス> <新サイズ>
sudo resize2fs /dev/lvg-data/shared
sudo resize2fs /dev/lvg-data/shared 10G
# 縮小
sudo umount /dev/lvg-data/shared
## 書式: resize2fs <LVパス> または resize2fs <LVパス> <新サイズ>
sudo e2fsck -f /dev/lvg-data/shared
sudo resize2fs /dev/lvg-data/shared 10G
## 書式:lvreduce -L <新サイズ> <LVパス>
sudo lvreduce -L 10G /dev/lvg-data/shared
マウント失敗時の対応
# VGをアクティブ化 書式: vgchange -ay
sudo vgchange -ay
必要に応じて:
echo "lvm2" | sudo tee /etc/initramfs-tools/modules
# initramfsを更新 書式: update-initramfs -u
sudo update-initramfs -u
自動化:LVM初期化スクリプト例
#!/bin/bash
for disk in sdb sdc sdd sde; do
echo "Creating partition on /dev/$disk"
echo -e "n
p
1
t
8e
w" | sudo fdisk /dev/$disk
sudo partprobe /dev/$disk
sudo pvcreate /dev/${disk}1
done
sudo vgcreate lvg-batch /dev/sd{b,c,d,e}1
sudo lvcreate -L 20G -n lvdata lvg-batch
sudo mkfs.ext4 /dev/lvg-batch/lvdata
sudo mkdir -p /mnt/lvdata
sudo mount /dev/lvg-batch/lvdata /mnt/lvdata
Discussion