Linux ディスク パーティションの詳細な分析 | LVM 論理ボリューム | VDO ボリューム | AutoFS ストレージの自動マウント
序文
これらの手法とツールの使用方法は Linux ディストリビューションによって異なる場合があることに注意してください。詳細と手順については、使用している特定のディストリビューションのドキュメントとガイドを確認する必要があります。
1. オペレーティング システムのパーティション構成をインストールします。
/boot
パーティション を作成します(サイズ 50MB):
/boot/efi
パーティションを 200MB に設定し、
Swap
スワップ パーティションのサイズを物理メモリ サイズの 2 倍に設定します:
残りのスペースはすべて/
パーティション用に予約されます。もちろん、ルート パーティションを 50GB に設定することもできますまたは100GBにして、残りのスペースを分割し、/home
パーティションと/var
パーティションを与えます
2. 大容量ディスクのパーティション管理
[root@localhost ~]# fdisk -l
Disk /dev/sda: 8393.0 GB, 8392996290560 bytes, 16392570880 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 262144 bytes / 1048576 bytes
表示できる合計スペース/dev/sda
は約 8T で、パーティションのフォーマット操作は直接実行されます。
[root@localhost ~]# fdisk /dev/sda
[root@localhost ~]# mkfs.xfs /dev/sda1
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 63G 0 63G 0% /dev
tmpfs 63G 0 63G 0% /dev/shm
tmpfs 63G 11M 63G 1% /run
tmpfs 63G 0 63G 0% /sys/fs/cgroup
/dev/mapper/centos-root 50G 2.0G 49G 4% /
/dev/sdb2 1014M 151M 864M 15% /boot
/dev/sdb1 200M 12M 189M 6% /boot/efi
/dev/mapper/centos-home 838G 34M 838G 1% /home
tmpfs 13G 0 13G 0% /run/user/0
/dev/sda1 2.0T 34M 2.0T 1% /data
ディスク容量はわずか2Tです。その理由は、fdisk では最大 2T のパーティションしか作成できないためです。2T を超える場合は、parted を使用して
fdisk で作成したディスク パーティションを削除します。
[root@localhost ~]# fdisk /dev/sda
Command (m for help): p
Command (m for help): d
Selected partition 1
Partition 1 is deleted
Command (m for help): w
次に、parted ツールを使用してパーティションを作成します。
[root@localhost ~]# parted /dev/sda
GNU Parted 3.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: BROADCOM MR9560-16i (scsi)
Disk /dev/sda: 8393GB # 磁盘空间最大8393GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
(parted) mklabel gpt
Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? y
(parted) mkpart
Partition name? []? sda1
File system type? [ext2]? ext4
Start? 0
End?
End? 8393GB
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? Ignore
(parted) p
Model: BROADCOM MR9560-16i (scsi)
Disk /dev/sda: 8393GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 8393GB 8393GB sda1
(parted) quit
Information: You may need to update /etc/fstab.
[root@localhost ~]# fdisk -l
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Disk /dev/sda: 8393.0 GB, 8392996290560 bytes, 16392570880 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 262144 bytes / 1048576 bytes
Disk label type: gpt
Disk identifier: E43B9D7C-0D7E-470D-8BBA-FC6A7238D6C3
# Start End Size Type Name
1 34 16392570846 7.6T Microsoft basic sda1
[root@localhost ~]# mkfs.ext4 /dev/sda1
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/sda1 /data
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 63G 0 63G 0% /dev
tmpfs 63G 0 63G 0% /dev/shm
tmpfs 63G 11M 63G 1% /run
tmpfs 63G 0 63G 0% /sys/fs/cgroup
/dev/mapper/centos-root 50G 2.0G 49G 4% /
/dev/sdb2 1014M 151M 864M 15% /boot
/dev/sdb1 200M 12M 189M 6% /boot/efi
/dev/mapper/centos-home 838G 34M 838G 1% /home
tmpfs 13G 0 13G 0% /run/user/0
/dev/sda1 7.6T 93M 7.2T 1% /data
ディスクの UUID を表示します。
blkid
/dev/mapper/centos-root: UUID="6daff923-488c-4dd8-80ee-fb5faed8cca9" TYPE="xfs"
/dev/sdb3: UUID="JW1wdc-hst2-omzt-QegM-XS5a-tShf-OeUu1a" TYPE="LVM2_member" PARTUUID="6d3d61ff-6f12-4537-8abc-e59075d23291"
/dev/sda1: UUID="bcde2c04-0944-4ec3-9d16-cdfbff7f38ea" TYPE="ext4" PARTLABEL="sda1" PARTUUID="1a4db326-aa94-4c44-99b5-21d96388334a"
/dev/sdb1: SEC_TYPE="msdos" UUID="B09B-3EEA" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="6f8129b9-3eae-4234-98b8-7cde65820c0c"
/dev/sdb2: UUID="dc45cf08-fdca-4c5c-9ef5-94396644c548" TYPE="xfs" PARTUUID="54c0bb37-f49e-4f87-aaa3-96201d717bb7"
/dev/mapper/centos-swap: UUID="1ca6f4e8-c154-4ec0-9200-74bf2d7c8e87" TYPE="swap"
/dev/mapper/centos-home: UUID="a8c37d6a-51e1-44ec-b506-29614f931ad1" TYPE="xfs"
[root@localhost ~]# vim /etc/fstab
UUID=bcde2c04-0944-4ec3-9d16-cdfbff7f38ea /data xfs defaults 0 0
ディスクの読み取りおよび書き込みパフォーマンスをテストします。
[root@localhost ~]# dumpe2fs /dev/sda1|grep -i "block Size"
dumpe2fs 1.42.9 (28-Dec-2013)
Block size: 4096
書き込みパフォーマンスのテスト:
[root@localhost ~]# cd /data/
[root@localhost data]# time dd if=/dev/zero of=/testio bs=4k count=100000 oflag=direct oflag=sync
100000+0 records in
100000+0 records out
409600000 bytes (410 MB) copied, 9.6584 s, 42.4 MB/s
real 0m9.732s
user 0m0.103s
sys 0m4.798s
[root@localhost data]# dd if=/dev/zero of=/testio2 bs=4k count=100000 oflag=direct
100000+0 records in
100000+0 records out
409600000 bytes (410 MB) copied, 3.71845 s, 110 MB/s
# 添加oflag=direct将跳过内存缓存,添加oflag=sync将跳过hdd缓存
テスト読み取りパフォーマンス:
[root@localhost data]# time dd if=/dev/sda1 of=/dev/null bs=4k
^C4775424+0 records in
4775423+0 records out
19560132608 bytes (20 GB) copied, 12.6906 s, 1.5 GB/s
real 0m12.693s
user 0m0.804s
sys 0m10.713s
3. LVM論理ボリューム管理
LVM (Logical Volume Manager) は、Linux システムでハードディスクのパーティションを管理するためのメカニズムで、ディスクとパーティションの上に論理層を構築して、ディスク パーティションを柔軟かつ効率的に管理し、ディスク管理操作を簡素化します。論理ボリュームのサイズは、既存のデータを失うことなく動的に調整でき、新しいディスクが追加された場合でも、既存の論理ボリュームは変更されません。
3.1. LVM 論理ボリュームの作成
3.1.1. 物理ボリュームPVの作成
yum install -y lvm2
ホスト上のすべてのハード ドライブを表示します。
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 2.2T 0 disk
sdb 8:16 0 893.1G 0 disk
├─sdb1 8:17 0 190M 0 part /boot/efi
├─sdb2 8:18 0 976M 0 part /boot
├─sdb3 8:19 0 128G 0 part [SWAP]
└─sdb4 8:20 0 764G 0 part /
sdc 8:32 0 1.1T 0 disk
sdd 8:48 0 1.1T 0 disk
sde 8:64 0 2.2T 0 disk
sda と sde を使用して物理ボリュームを作成し、複数のデバイスをスペースで区切ることを選択します。
pvcreate /dev/sda /dev/sde
3.1.2. ボリュームグループ VG の作成
vgcreate <卷组名称> <物理卷名称> …… <物理卷名称>
たとえば、vg_01 ボリューム グループを作成し、2 つの物理ボリューム /dev/sda および /dev/sde を追加します。
vgcreate vg_01 /dev/sda /dev/sde
新しい物理ボリュームをボリューム グループに追加する必要がある場合は、次のコマンドを実行して、作成された他の物理ボリュームを追加します。
vgextend <卷组名称> <物理卷名称> …… <物理卷名称>
ボリューム グループ情報を表示します。
vgs
VG #PV #LV #SN Attr VSize VFree
vg_01 2 0 0 wz--n- 4.36t 4.36t
3.1.3. 論理ボリュームLVの作成
論理ボリュームを作成します。
lvcreate -L <逻辑卷大小> -n <逻辑卷名称> <卷组名称>
# 逻辑卷大小:逻辑卷的大小应小于卷组剩余可用空间。
# 逻辑卷名称:由您自定义,例如lv01。
# 卷组名称:创建卷组已经创建的卷组的名称,例如vg_01
lvcreate -L 10g -n lv01 vg_01
3.1.4. ファイルシステムの作成とマウント
論理ボリュームのパス、名前、所属するボリューム グループなどの情報を取得します。これは後続の手順で使用する必要があります。
lvdisplay
--- Logical volume ---
LV Path /dev/vg_01/lv01
LV Name lv01
VG Name vg_01
LV UUID 4fx5f3-BA2H-yCcE-2mys-p0FW-umQS-0ur97v
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2023-07-13 23:25:53 -0400
LV Status available
# open 0
LV Size 10.00 GiB
Current LE 2560
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
# LV Path:逻辑卷路径,例如/dev/vg_01/lv01
# LV Name:逻辑卷的名称,例如lv01
# VG Name:逻辑卷所属的卷组名称,例如vg_01
# LV Size:逻辑卷的大小,图示信息为10 GiB
論理ボリューム上にファイル システムを作成します。
mkfs.<文件系统格式> <逻辑卷路径>
フォーマットする例として、論理ボリューム パスを /dev/vg_01/lv01、ファイル システムを ext4 とします。
mkfs.ext4 /dev/vg_01/lv01
/media/lv01 などの新しいマウント ポイントを作成し、ファイル システムをそのマウント ポイントにマウントします。
mkdir /media/lv01
mount /dev/vg_01/lv01 /media/lv01
論理ボリュームのマウント結果を確認します。
df -h
Filesystem Size Used Avail Use% Mounted on
......
/dev/mapper/vg_01-lv01 9.8G 37M 9.2G 1% /media/lv01
3.1.5. 起動時の自動マウントの設定
起動時に論理ボリュームが自動的にマウントされるように設定する必要がある場合は、システムの電源投入および再起動時に論理ボリュームが自動的にマウントされるように、/etc/fstab に論理ボリュームのマウント情報を追加する必要があります。
次のコマンドを実行して etc/fstab ファイルをバックアップします。
cp /etc/fstab /etc/fstab.bak
ターゲット論理ボリュームのマウント情報を /etc/fstab ファイルに追加します。
echo `blkid <逻辑卷路径> | awk '{print $2}' | sed 's/\"//g'` <逻辑卷挂载点> <逻辑卷的文件系统类型> defaults 0 0 >> /etc/fstab
論理ボリューム (パスは /dev/vg_01/lv01) は、コンピュータの電源を入れて再起動すると、/media/lv01 ディレクトリに自動的にマウントされます。ファイル システムの種類は ext4 です。
echo `blkid /dev/vg_01/lv01 | awk '{print $2}' | sed 's/\"//g'` /media/lv01 ext4 defaults 0 0 >> /etc/fstab
論理ボリュームのマウント情報が正常に追加されたかどうかを確認します。
cat /etc/fstab
......
UUID=2b1a3a54-2ab8-48f4-a321-3d5bfed63482 /media/lv01 ext4 defaults 0 0
自動マウント機能が有効であることを確認し
、/etc/fstabに設定されているファイルシステムを再マウントしてください。エラー出力がない場合は、論理ボリュームが指定されたマウント ポイントに正常にマウントされたことを意味します。
mount -a
3.2. 論理ボリュームの拡張と縮小
論理ボリュームを拡張します。
LVM (Logical Volume Manager) を通じて論理ボリューム LV (Logical Volume) を拡張し、
他の物理ディスクを使用して物理ボリュームを作成します。
pvcreate <云盘设备名称>
pvcreate /dev/sdc
ボリューム グループ情報を確認し、次のコマンドを実行してボリューム グループを拡張します。
vgs
VG #PV #LV #SN Attr VSize VFree
vg_01 2 1 0 wz--n- 4.36t 4.35t
vgextend <卷组名称> <物理卷名称>
物理ボリューム /dev/sdc をボリューム グループ vg_01 に追加します。
vgextend vg_01 /dev/sdc
ボリューム グループ情報を表示します。
vgs
VG #PV #LV #SN Attr VSize VFree
vg_01 3 1 0 wz--n- 5.45t 5.44t
論理ボリュームとファイル システムを拡張する:
論理ボリュームのパス、名前、所属するボリューム グループなどの情報を取得します。これは後続の手順で使用する必要があります。
lvdisplay
--- Logical volume ---
LV Path /dev/vg_01/lv01
LV Name lv01
VG Name vg_01
LV UUID 4fx5f3-BA2H-yCcE-2mys-p0FW-umQS-0ur97v
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2023-07-13 23:25:53 -0400
LV Status available
# open 1
LV Size 10.00 GiB
Current LE 2560
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
論理ボリュームを拡張します。
lvextend -L <增/减逻辑卷容量> <逻辑卷路径>
論理ボリュームに 5GiB の容量を追加します (パスは /dev/vg_01/lv01)。
lvextend -L +5G /dev/vg_01/lv01
或者:
lvextend -L 15G /dev/vg_01/lv01
論理ボリューム ファイル システムを拡張します。
resize2fs <逻辑卷路径>
例として、論理ボリューム lv01 (パスは /dev/vg_01/lv01) の拡張を考えます。
resize2fs /dev/vg_01/lv01
df -h
Filesystem Size Used Avail Use% Mounted on
......
/dev/mapper/vg_01-lv01 15G 41M 14G 1% /media/lv01
論理ボリュームを縮小します。
最初に論理ボリュームをアンマウントします/dev/mapper/vg_01-lv01
。
umount /media/lv01
umount: /media/lv01: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
fuser -m /media/lv01
/media/lv01: 9141c
ps -ef | grep 9141
root 9141 9137 0 Jul13 pts/2 00:00:00 -bash
root 39546 39449 0 02:18 pts/0 00:00:00 grep --color=auto 9141
kill -9 9141
umount /media/lv01
e2fsck コマンドを使用して、論理ボリュームの空きスペースを確認します。
e2fsck -f /dev/mapper/vg_01-lv01
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/vg_01-lv01: 12/983040 files (0.0% non-contiguous), 104724/3932160 blocks
size2fs を使用してファイルシステムを 3G に縮小します
resize2fs /dev/mapper/vg_01-lv01 3G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/mapper/vg_01-lv01 to 786432 (4k) blocks.
The filesystem on /dev/mapper/vg_01-lv01 is now 786432 blocks long.
lvreduce コマンドを使用して、論理ボリュームを 3G に削減します。
lvreduce -L 3G /dev/mapper/vg_01-lv01
WARNING: Reducing active logical volume to 3.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg_01/lv01? [y/n]: y
Size of logical volume vg_01/lv01 changed from 15.00 GiB (3840 extents) to 3.00 GiB (768 extents).
Logical volume vg_01/lv01 successfully resized.
mount -a
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_01-lv01 2.9G 25M 2.7G 1% /media/lv01
3.3. ボリュームグループの縮小
まず、削除する物理ボリュームを決定し、この物理ボリューム上のデータを他の物理ボリュームに転送してから、この物理ボリュームをボリューム グループから削除します。
pvmove /dev/sdc
No data to move for vg_01.
pvmove コマンドが完了したら、再度 pvs コマンドを使用して物理ボリュームが空いているかどうかを確認します。
pvs -o+pv_used
PV VG Fmt Attr PSize PFree Used
/dev/sda vg_01 lvm2 a-- 2.18t <2.18t 3.00g
/dev/sdc lvm2 --- 1.09t 1.09t 0
/dev/sde vg_01 lvm2 a-- 2.18t 2.18t 0
空いている場合は、vgreduce コマンドを使用して、物理ボリューム /dev/sdc をボリューム グループから削除します。
vgreduce vg_01 /dev/sdc
Removed "/dev/sdc" from volume group "vg_01"
最後に、pvremove コマンドを実行して、LVM 構成からディスクを削除します。
pvremove /dev/sdc
Labels on physical volume "/dev/sdc" successfully wiped.
3.4. 論理ボリューム、ボリュームグループ、物理ボリュームの削除
umount /media/lv01
lvremove /dev/mapper/vg_01-lv01
Do you really want to remove active logical volume vg_01/lv01? [y/n]: y
Logical volume "lv01" successfully removed
vgremove vg_01
Volume group "vg_01" successfully removed
lvs # 执行结果为空
vgs # 执行结果为空
pvs
PV VG Fmt Attr PSize PFree
/dev/sda lvm2 --- 2.18t 2.18t
/dev/sde lvm2 --- 2.18t 2.18t
pvremove /dev/sda
Labels on physical volume "/dev/sda" successfully wiped.
pvremove /dev/sde
Labels on physical volume "/dev/sde" successfully wiped.
4. VDO (仮想データ最適化) ボリューム管理
4.1. VDO の概要
VDO (Virtual Data Optimize) は、RHEL8/Centos8 で新たに導入されたストレージ関連テクノロジ (7.5 ベータ版で最初にテスト) で、Redhat が買収した Permabit のテクノロジです。
VDO の主な機能はディスク領域を節約することです。たとえば、1T ディスクには 1.5T のデータを保存できるため、データセンターのコストが削減されます。
VDO の主要な実装原則は主に重複排除と圧縮です。重複排除とは、同じデータをハードディスクにコピーすることを意味します。以前は複数のスペースのコピーを占有していましたが、現在は 1 つのスペースのコピーのみが必要です。大規模なソフトウェア インストール パッケージを Baidu Netdisk にアップロードするのと同様に、即座に転送できます。実際、履歴記録はすでに存在しているため、同じファイルを再度アップロードする必要はなく、Baidu のスペースを占有する必要もありません。 。一方、データ圧縮は圧縮ソフトウェアのアルゴリズムに似ており、より多くのディスク領域を節約できます。
VDO (Virtual Data Optimizer) は、ローカル ファイル システム、iSCSI または Ceph ストレージの下に追加のストレージ レイヤーとして使用できるストレージ ソフトウェアです。VDO は、重複排除、圧縮、シン プロビジョニングの形式で Linux にインライン データ削減を提供します。VDO ボリュームを設定する場合、VDO ボリュームを構築するブロック デバイスを指定し、論理ストレージの量を設定できます。
● 仮想マシンまたはコンテナに使用する場合は、論理ストレージと物理ストレージの比率が 10:1 になるようにストレージを構成することをお勧めします。つまり、1 TB の物理ストレージが使用されている場合、10 TB の論理ストレージとして表示されます。
● Ceph が提供するタイプなどのオブジェクト ストレージの場合は、論理対物理の比率を 3:1 にすることをお勧めします。1 TB の物理ストレージは 3 TB の論理ストレージとして表示されます。どちらの場合も、ファイル システム
をVDO は論理デバイス上に提供され、それを直接使用するか、分散クラウド ストレージ アーキテクチャの一部として使用します。
VDO は迅速にプロビジョニングされるため、ファイル システムとアプリケーションは使用中の論理スペースのみを認識し、実際に使用可能な物理スペースを認識しません。スクリプトを使用して実際の空き領域を監視し、使用量がしきい値を超えた場合 (たとえば、VDO ボリュームが 80% 使用されている場合) にアラートを生成します。
VDO 導入シナリオ:
KVM:
VDO は、直接接続ストレージが構成された KVM サーバーに展開できます。
ファイルシステム:
ファイル システムは VDO 上に作成でき、NFS サーバーまたは Samba 経由で NFS または CIFS ユーザーに公開できます。
VDO を iSCSI に配置します。
VDO ストレージ ターゲット全体を iSCSI ターゲットとしてリモート iSCSI イニシエータにエクスポートできます
。iSCSI 上に VDO ボリュームを作成する場合、VDO ボリュームを iSCSI 層の上または下に配置できます。
iSCSI レイヤーの下の iSCSI サーバー (ターゲット) に VDO ボリュームを配置する場合:
● VDO ボリュームは、他の iSCSI LUN と同様に、イニシエータに対して透過的です。シン プロビジョニングとスペースの節約をクライアントから隠すことで、LUN の監視と保守が容易になります。
● VDO メタデータの読み取りまたは書き込みが行われず、ネットワーク上で重複排除の推奨事項の読み取り検証が行われないため、ネットワーク トラフィックが削減されます。
● iSCSI ターゲットでメモリと CPU リソースを使用すると、パフォーマンスが向上する可能性があります。たとえば、iSCSI ターゲットでボリュームが削減されると、より多くのハイパーバイザーをホストできるようになります。
● クライアントがイニシエータに暗号化を実装し、ターゲットの下に VDO ボリュームがある場合、スペースの節約は実現されません。
VDO ボリュームを iSCSI 層の上の iSCSI クライアント (イニシエーター) に配置する場合:
● スペースを大幅に節約する場合、非同期モードのネットワーク トラフィックが削減される可能性があります。
● スペースの節約と使用状況の監視を直接表示して制御できます。
● たとえば を使用してデータを暗号化する場合はdm-crypt
、暗号化に加えて VDO を実装し、スペース効率を最大限に活用できます。
LVM:
以下の図では、LVM で管理できるように VDO ターゲットを物理ボリュームとして登録しています。重複排除されたストレージプールから複数の論理ボリューム (LV1 ~ LV4) を作成します。これにより、VDO は基盤となる重複排除ストレージ プールへのマルチプロトコルの統合ブロックまたはファイル アクセスをサポートできるようになります。
4.2. VDO のデプロイ
VDO ソフトウェアをインストールします。
yum install lvm2 kmod-kvdo vdo
VDO ボリュームの作成:
次に、ブロック デバイスに VDO ボリュームを作成します。次の手順では、vdo-name
VDO ボリュームに使用する識別子 (例: ) に置き換えますvdo1
。システム内の各 VDO インスタンスには、異なる名前とデバイスを使用する必要があります。非永続的なデバイス名を使用すると、将来デバイス名が変更された場合に VDO が正しく起動しなくなる可能性があります。
vdo create \
--name=vdo-name \
--device=block-device \
--vdoLogicalSize=logical-size
# --name后面跟vdo卷的名称,随便写,好认即可
# --device后面跟真实的物理磁盘
# --vdoLogicalSize后面跟vdo卷的容量,这里按真实物理空间的1.5倍
vdo create \
--name=vdo-name \
--device=/dev/sdc \
--vdoLogicalSize=50G
Creating VDO vdo-name
Starting VDO vdo-name
Starting compression on VDO vdo-name
VDO instance 0 volume is ready at /dev/mapper/vdo-name
物理ブロック デバイスが 16TiB より大きい場合は、 --vdoSlabSize=32G オプションを追加して、ボリューム上のスラブ サイズを 32GiB に増やします。
mkfs.xfs /dev/mapper/vdo-name
VDO をマウントする:
mount /dev/mapper/vdo-name /vodvolume/
定期的なブロック破棄を有効にする:タイマーを有効にして、サポートされているすべてのファイル システムで未使用のブロックを定期的に破棄
できます。タイマーを 有効にして開始します。systemd
systemd
systemctl enable --now fstrim.timer
タイマーのステータスを確認します。
systemctl status fstrim.timer
● fstrim.timer - Discard unused blocks once a week
Loaded: loaded (/usr/lib/systemd/system/fstrim.timer; enabled; vendor preset: disabled)
Active: active (waiting) since Fri 2023-07-14 04:33:38 EDT; 5s ago
Docs: man:fstrim
Jul 14 04:33:38 localhost.localdomain systemd[1]: Started Discard unused blocks once a week.
VDO の監視:
ツール を使用してvdostats
VDO ボリュームに関する情報を取得します。
vdostats --human-readable
Device Size Used Available Use% Space saving%
/dev/mapper/vdo-name 1.1T 5.4G 1.1T 0% 99%
vdostats は、実際の物理スペースのサイズと残りのスペースを確認するために使用されます。
4.3. VDOのメンテナンス
4.3.1. VDO ボリュームの空き領域の管理
4.3.2. VDO ボリュームの起動または停止
システムの起動プロセス中に、vdo
VDOsystemd
ユニットはアクティベーション用に構成されたすべての VDO デバイスを自動的に起動します。vdo
パッケージをインストールすると、ユニットがインストールされ、デフォルトで有効になりますvdo
systemd
。このユニットは、システム起動時に、vdo start --all
アクティブ化されたすべての VDO ボリュームを起動するコマンドを自動的に実行します。コマンドにオプションを追加することで、自動的に起動しない VDO ボリュームを作成する
こともできます。vdo create
--activate=disabled
ブートシーケンス:
一部のシステムでは、LVM ボリュームが VDO ボリュームの上または下に配置される場合があります。これらのシステムでは、サービスを正しい順序で開始する必要があります。
● LVM の下位層を最初に開始する必要があります。ほとんどのシステムでは、LVM パッケージがインストールされると、この層が自動的に開始されます。
● その後、ユニットをvdo
systemd
起動する必要があります。
● 最後に、実行中の VDO ボリューム上で LVM ボリュームまたはその他のサービスを開始するには、追加のスクリプトを実行する必要があります。
ボリュームの停止に必要な時間: VDO ボリュームの停止に必要な時間は、
ストレージ デバイスの速度と、ボリュームに書き込む必要があるデータの量によって異なります。 ● ボリュームは常に、
1GiB の UDS インデックスごとに約 1GiB を書き込みます。
● このボリュームには、ブロック マップ キャッシュ サイズにスラブあたり最大 8MiB を加えた量のデータも書き込みます。
● ボリュームは、すべての未処理の IO リクエストの処理を完了する必要があります。
特定の VDO ボリュームを開始するには、次を使用します。
vdo start --name=vdo-name
Starting VDO vdo-name
VDO instance 0 volume is ready at /dev/mapper/vdo-name
すべての VDO ボリュームを開始するには、次を使用します。
vdo start --all
VDO ボリュームをアクティブにする (VDO ボリュームをアクティブにして、自動的に起動するようにします):
特定のボリュームをアクティブにします:
vdo activate --name=vdo-name
vdo-name already activated
すべてのボリュームをアクティブ化します。
vdo activate --all
vdo-name already activated
特定のボリュームを非アクティブ化します。
vdo deactivate --name=vdo-name
すべてのボリュームを非アクティブ化します。
vdo deactivate --all
4.3.3. VDO書き込みモードの選択
同期モード:
VDO が同期モードの場合、上位層は書き込みコマンドが永続ストレージにデータを書き込むと考えます。その結果、ファイル システムまたはアプリケーションは、データを保持するために FLUSH または強制ユニット アクセス (FUA) リクエストを発行するなど、重大な障害ポイントでのデータ保持に対処する必要がなくなります (つまり、キャッシュをフラッシュする必要がなくなります)。キャッシュから永続ストレージにデータを書き込みます。上位層は、書き込みコマンドがキャッシュではなく永続ストレージに直接書き込まれると考えます)。基礎となるストレージが、書き込みコマンドの完了時にデータが永続ストレージに書き込まれることを保証できる場合、VDO を同期モードに設定する必要があります。つまり、ストレージ デバイスには揮発性書き込みキャッシュがないか、ライトスルー キャッシュがあります。
非同期モード:
VDO が非同期モードの場合、VDO は、書き込みコマンドの完了時にデータが永続ストレージに書き込まれることを保証しません。ファイル システムまたはアプリケーションは、重大な障害が発生した場合でもデータが確実に保持されるように、対話のたびに FLUSH または FUA リクエストをトリガーする必要があります。コマンドの完了時に基盤となるストレージがデータの永続性を保証できない場合は、VDO を非同期モードに設定する必要があります。つまり、ストレージデバイスは揮発性書き込みキャッシュを備えています。
自動モード:
自動モードは、デバイスのプロパティに従って同期モードまたは非同期モードを自動的に選択します。
VDO書き込みモードの内部処理:
kvdo カーネル モジュールが同期モードで実行される場合:
● まず、要求されたデータを割り当てられたブロックに一時的に書き込み、次に要求を確認します。
● 確認が完了すると、ブロック データのハッシュ署名を計算してブロックの重複排除が試行され、VDO インデックスに送信されます。
● VDO インデックスに同じ署名を持つブロックが含まれている場合、kvdo は見つかったブロックを読み取り、2 つのブロックをバイトごとに比較して、それらが同一であることを確認します。
● それらが実際に同じである場合、kvdo は論理ブロックが対応する物理ブロックを指すようにブロック マップを更新し、割り当てられた一時物理ブロックを解放します ● VDO インデックスに書き込まれるブロックの署名が含まれていない場合
、または、指定されたブロックに実際には同じデータが含まれていない場合、kvdo はそのブロック マップを更新して、一時的な物理ブロックを永続的なものにします。
kvdo カーネル モジュールが非同期モードで実行されている場合:
● データを書き込むのではなく、ただちにリクエストを承認します。
● 次に、上記と同じ方法でデータ ブロックのチェックを試みます
。 ● ブロックが重複ブロックであることが判明した場合、 kvdo マッピングを更新し、割り当てられたブロックを解放します。それ以外の場合は、リクエストからのデータを割り当てられたブロックに書き込み、ブロック マップを更新して物理ブロックを永続的にします。
VDO ボリュームで使用される書き込みモードを表示します。
vdo status --name=vdo-name | grep "write policy"
Configured write policy: auto
write policy: sync
# 配置的写入策略: 会有sync、async或auto选项
# 写入策略:是VDO应用的特定的写模式,即sync或async
揮発性キャッシュの確認:
ファイル を参照して/sys/block/block-device/device/scsi_disk/identifier/cache_type
揮発性キャッシュを確認できます。
cat /sys/block/sda/device/scsi_disk/7:0:0:0/cache_type
write back
cat /sys/block/sdb/device/scsi_disk/1:2:0:0/cache_type
None
cat /sys/block/sdc/device/scsi_disk/0\:3\:109\:0/cache_type
write through
● デバイスはsda
ライトバック キャッシュがあることを示します。使用async
パターン
● デバイスはsdb
ライトバック キャッシュを持たないことを示しています。その使用sync
パターン
Cache_type の値が None またはライトスルーの場合、VDO は同期書き込みモードを使用するように構成する必要があります。
VDO 書き込みモードの設定:
既存のボリュームまたは新しいボリュームの作成時に、VDO ボリュームの書き込みモードを設定します。
不適切な書き込みモードを使用すると、停電、システムのクラッシュ、またはディスクとの予期しない接続喪失の後にデータが失われる可能性があります。
既存の VDO ボリュームを変更するには、以下を使用します。
vdo changeWritePolicy --writePolicy=sync|async|async-unsafe|auto \
--name=vdo-name
VDO ボリュームの作成時に書き込みモードを指定するには、vdo create
コマンドに--writePolicy=sync|async|async-unsafe|auto
オプションを追加します。
4.3.4. VDO ボリュームのリカバリと再構築
VDO ボリュームのリカバリ:
VDO ボリュームの再構築操作は、手動介入なしで自動的に完了します。VDO は、現在の書き込みモードに従って、さまざまな書き込みルールを再構築します。異常なシャットダウン後に VDO ボリュームが起動されると、VDO はボリューム上のメタデータを検証します。整合性、修復が必要な場合はメタデータの一部を再構築します。
sync:
VDO が同期ストレージ上で実行されており、書き込みポリシーが に設定されている場合sync
、ボリュームに書き込まれたすべてのデータを完全にリカバリできます。
async:
書き込みポリシーがasync
「はい」の場合、一部の書き込みは永続的でない場合、回復されない可能性があります。VDO FLUSH
これは、FUA (Forced Unit Access) フラグを使用してコマンドまたは書き込み I/O を送信することによって実現できます。fsync
これは、fdatasync
、sync
、 などumount
のデータ整合性操作を呼び出すことによってユーザー モードで実現できます。
どちらのモードでも、一部の未承認またはフラッシュされていない書き込みも再構築される可能性があります。
自動および手動リカバリ:
VDO ボリュームがリカバリ操作モードに入ると、VDO はオンラインに戻った後、クリーンでない VDO ボリュームを自動的に再構築します。これをオンラインリカバリと呼びます。
VDO が VDO ボリュームを正常に回復できない場合、ボリュームは読み取り専用動作モードになり、ボリュームが再起動されてもそのモードが有効になります。この問題を手動で解決するには、再構築を強制する必要があります。
VDO 動作モード:
次の方法を使用して、VDO ボリュームが正常に動作しているか、エラーから回復しているかを確認できます。
vdostats --verbose vdo-name | grep mode
operating mode : normal
通常:
これはデフォルトの動作モードです。VDO ボリュームは、normal
次の状態のいずれかによって別のモードが強制されない限り、常にモードになります。新しく作成された VDO ボリュームはnormal
モードで開始されます。
回復中: VDO ボリュームがシャットダウンする前にすべてのメタデータを保存しなかった場合、次回起動時に
自動的にモードに入ります。recovering
このモードに入る一般的な理由は、電源の喪失または基盤となるストレージ デバイスの問題です。
モードではrecovering
、VDO はデバイス上の各物理ブロックへの参照の数を修復します。通常、回復にはそれほど長い時間はかかりません。時間は、VDO ボリュームのサイズ、基礎となるストレージ デバイスの速度、および VDO への他のリクエストを同時に処理できる速度によって異なります。VDO ボリュームには通常、次の例外があります。
● 最初は、ボリュームへの書き込みに要求されるスペースの量が制限されている場合があります。より多くのメタデータが復元されると、より多くの空き領域が利用可能になります。
● データがボリュームのまだリカバリされていない部分にある場合、VDO ボリュームのリカバリ中のデータの書き込みでは、クラッシュ前に書き込まれたデータの重複が排除されない可能性があります。VDO は、ボリュームを復元するときにデータを圧縮します。圧縮されたブロックの読み取りまたは上書きは引き続き可能です。
● オンラインリカバリ中は、使用中のブロックや空きブロックなどの一部の統計は利用できません。これらの統計は、再構築の完了後に利用可能になります。
● 継続的な回復作業により、読み取りおよび書き込みの応答時間が通常より遅くなる場合がありますが、 VDO ボリュームはモードで安全にシャットダウンでき
ます。recovering
シャットダウンする前に回復が完了していない場合、デバイスは次回電源を入れたときに再び回復モードに入ります。
VDO ボリュームがすべての参照を修復すると、VDO ボリュームは自動的にrecovering
モードを終了し、normal
モードに入ります。管理者のアクションは必要ありません。
VDO ボリュームをオンラインで復元する:
次のコマンドを使用して、VDO ボリュームをオンラインで復元できます。
vdo start --name=vdo-name
追加の手順は必要ありません。バックグラウンドでの実行を再開する
VDO ボリュームのメタデータを強制的にオフラインで再構築する:
異常なシャットダウン後の回復を容易にするために、VDO ボリュームのメタデータを強制的にオフラインで再構築します。前提条件として、VDO ボリュームが起動している必要があります。
このプロセスにより、ボリュームのデータが失われる可能性があります
ボリュームが読み取り専用モードかどうかを確認します。
vdo status --name=vdo-name | grep mode
operating mode: normal
ボリュームが読み取り専用モードでない場合は、オフラインでの再構築を強制する必要はありません。オンラインリカバリの実行
ボリュームが実行中の場合は、停止します。
vdo stop --name=vdo-name
次のオプションを使用してボリュームを再起動します--forceRebuild
。
vdo start --name=vdo-name --forceRebuild
失敗した VDO ボリュームの削除:
このプロセスは、中間状態にある VDO ボリュームをクリーンアップします。ボリュームの作成中に障害が発生した場合、ボリュームは中間状態になります。これは、たとえば次のような状況で発生する可能性があります。
● システムのクラッシュ
● 電源障害
● 管理者が実行中のvdo create
コマンドを中断した場合
クリーンアップするには、--force
作成に失敗したボリュームを削除するオプションを使用します。
vdo remove --force --name=vdo-name
必須--force
オプション。ボリュームの作成が失敗すると、管理者がシステム構成の変更により競合を引き起こす可能性があります。--force
オプションがないとvdo remove
コマンドは失敗します
4.3.5. VDO での圧縮の有効化または無効化
VDO はデータ圧縮を提供します。これを有効にすると、スペースが節約されます。VDO ボリューム圧縮は、on
VDO が最初にデータを認識したときに、デフォルトで一意のデータに設定されます。保存されたデータの後続のコピーは、追加の圧縮手順なしで複製されます。
VDO ボリュームで圧縮を有効にします (圧縮はデフォルトで有効です)。
vdo enableCompression --name=vdo-name
VDO ボリュームの圧縮を無効にする:
既存の VDO ボリュームの圧縮を停止するには、次のコマンドを使用します。
vdo disableCompression --name=vdo-name
また、新しいボリュームを作成するときに、圧縮を無効にするオプションをコマンドにvdo create
追加できます。--compression=disabled
4.3.6. VDO ボリュームのサイズを増やす
VDO ボリュームの物理サイズを大きくして、基礎となるストレージ容量をより多く利用したり、論理サイズを大きくしてボリューム上の容量を増やすことができます。
物理サイズ:
基礎となるブロックデバイスのサイズ。VDO は、このストレージを次の目的で使用します。
● ユーザー データ (重複排除および圧縮される可能性がある)
● VDO メタデータ (UDS インデックスなど)
利用可能な物理サイズ:
これは、VDO がユーザー データに使用できる物理サイズの一部です。
物理サイズに等しいです。メタデータのサイズを計算し、指定されたスラブ サイズに基づいてボリュームをスラブに分割した後に残った値を減算します。
論理サイズ:
これは、アプリケーション内の VDO ボリュームのプロビジョニングされたサイズです。通常、利用可能な物理サイズよりも大きくなります。オプションが指定されていない場合、論理ボリュームのプロビジョニングは の比率--vdoLogicalSize
で構成されます。1:1
たとえば、VDO ボリュームを 20 GB のブロック デバイスに配置する場合、UDS インデックス用に 2.5 GB を予約します (デフォルトのインデックス サイズを使用する場合)。残りの 17.5 GB は、VDO メタデータとユーザー データ用に提供されます。したがって、使用可能なストレージは 17.5 GB を超えて消費されず、実際の VDO ボリュームを構成するメタデータによって減少する可能性があります。
VDO は現在、物理ボリュームの 254 倍までの論理ボリューム サイズをサポートしていますが、4PB 以下です。
VDO ディスク構造:
VDO ボリュームの論理ボリューム サイズを増やす:
このプロセスでは、特定の VDO ボリュームの論理サイズを増やします。まず、スペース不足にならない程度に小さい論理サイズの VDO ボリュームを作成します。時間の経過とともに、実際のデータ削減率を評価し、十分であれば VDO ボリュームの論理サイズを増やして、スペースの節約を活用できます。
VDO ボリュームの論理ボリューム サイズを減らすことはできません
論理サイズを増やすには、次を使用します。
# 原VDO卷大小
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdc 8:32 0 1.1T 0 disk
└─vdo-name 253:0 0 50G 0 vdo /vodvolume
vdo growLogical --name=vdo-name \
--vdoLogicalSize=100G
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdc 8:32 0 1.1T 0 disk
└─vdo-name 253:0 0 100G 0 vdo /vodvolume
VDO ボリュームの物理サイズを増やす:
VDO ボリュームが使用できる物理ストレージの量を増やすことができますが、この方法で VDO ボリュームが使用する物理ストレージの量を減らすことはできません。まず、基礎となるブロック デバイスの容量が VDO ボリュームの現在の物理サイズより大きくなければなりません。
新しい物理ストレージ スペースを VDO ボリュームに追加します。
vdo growPhysical --name=my-vdo
4.3.7. VDO ボリュームの削除
有効な VDO ボリュームを削除するには:
● ファイル システムをアンマウントし、VDO ボリューム内のストレージを使用しているアプリケーションを停止します。
● システムから VDO ボリュームを削除するには、次のコマンドを使用します。
vdo remove --name=vdo-name
作成に失敗した VDO ボリュームを削除する:
中間状態にある VDO ボリュームをクリーンアップします。ボリュームの作成中に障害が発生した場合、ボリュームは中間状態になります。これは、たとえば次のような状況で発生する可能性があります。
● システム クラッシュ
● 電源障害
● 管理者が実行中のvdo create
コマンドを中断
クリーンアップするには、--force
作成に失敗したボリュームを削除するオプションを使用します。
vdo remove --force --name=vdo-name
必須--force
オプション。ボリュームの作成が失敗すると、管理者がシステム構成の変更により競合を引き起こす可能性があります。--force
オプションがないとvdo remove
コマンドは失敗します
4.4. VDO スペース節約のテスト
4.4.1. VDO重複排除機能のテスト
まず、VDO テスト ボリュームを作成します。
テスト目的で、サイズ 2TiB の VDO ボリュームが 1.1TB 物理ボリュームに作成されました。
vdo create --name=vdo-test \
--device=/dev/sdd \
--vdoLogicalSize=2T \
--writePolicy=sync \
--verbose
● 非同期ストレージ上で VDO 非同期モードをテストするには、--writePolicy=async
非同期ボリュームを作成するオプションを使用し
ます。 ● 同期ストレージ上で VDO 同期モードをテストするには、--writePolicy=sync
同期ボリュームを作成するオプションを使用します。
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdd 8:48 0 1.1T 0 disk
└─vdo-test 253:1 0 2T 0 vdo
XFS または ext4 ファイル システムを使用して新しいボリュームをフォーマットします。
mkfs.xfs -K /dev/mapper/vdo-test
フォーマットされたボリュームをマウントします。
mkdir /mnt/vdo-test
mount /dev/mapper/vdo-test /mnt/vdo-test && \
chmod a+rwx /mnt/vdo-test
4.4.2. VDO の読み取りおよび書き込みパフォーマンスをテストする
32 GiB のランダム データを VDO ボリュームに書き込みます。
dd if=/dev/urandom of=/mnt/vdo-test/testfile bs=4096 count=8388608
8388608+0 records in
8388608+0 records out
34359738368 bytes (34 GB) copied, 165.781 s, 207 MB/s
VDO ボリュームからデータを読み取り、別のボリュームに書き込みます。
dd if=/mnt/vdo-test/testfile of=/tmp/testfile bs=4096
8388608+0 records in
8388608+0 records out
34359738368 bytes (34 GB) copied, 27.7768 s, 1.2 GB/s
これら 2 つのファイルを比較します。
diff --report-identical-files /mnt/vdo-test/testfile /tmp/testfile
Files /mnt/vdo-test/testfile and /tmp/testfile are identical
コマンドは、これらのファイルが同一であることを報告する必要があります。
4.4.3. クリーン VDO テストボリューム
VDO ボリュームに作成されたファイル システムをアンマウントします。
umount /mnt/vdo-test
VDO テスト ボリュームをシステムから削除します。
vdo remove --name=vdo-test
Removing VDO vdo-test
Stopping VDO vdo-test
ボリュームが削除されたことを確認します。
vdo list --all | grep vdo-test
4.5. 未使用のブロックを破棄する
4.5.1. ブロック破棄操作の種類
/sys/block/<device>/queue/discard_max_bytes
ファイル内の値がゼロ以外 の場合、物理的な破棄操作がサポートされます。
cat /sys/block/sdc/queue/discard_max_bytes
0
ブロックのドロップ操作は、さまざまな方法を使用して実行できます。
バルク ドロップ:
ユーザーによって明示的にトリガーされ、選択したファイル システム内の未使用のブロックをすべて破棄します。
オンライン ドロップ:
マウント時に指定し、ユーザーの介入なしでリアルタイムでトリガーします。オンライン破棄操作では、已使用
アイドル状態のブロックのみが破棄されます。
定期的な破棄:サービスが定期的に実行するバッチ操作
です。systemd
4.5.2. 一括ブロック破棄を行う
前提条件: ファイル システムがマウントされており、ファイル システムの基礎となるブロック デバイスが物理無視操作をサポートしています。
選択したファイル システムで破棄を実行します。
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vdo-name 50G 33M 50G 1% /vodvolume
fstrim /vodvolume
マウントされたすべてのファイル システムで破棄を実行するには、次を使用します。
fstrim --all
破棄操作をサポートしていないデバイス、または破棄操作をサポートしていない複数のデバイスで構成される論理デバイス (LVM または MD) を使用している場合:
fstrim /mnt/non_discard
fstrim: /mnt/non_discard: the discard operation is not supported
4.5.3. オンラインブロック破棄を有効にする
オンライン ブロック破棄を実行すると、サポートされているすべてのファイル システムで未使用のブロックを自動的に破棄できます。
マウント時にオンライン ブロック破棄を有効にするには、-o discard
マウント オプションを追加します。
mount -o discard device mount-point
ファイル システムを永続的にマウントする場合は、ファイル内のマウント エントリdiscard
にオプションを追加します。/etc/fstab
4.5.4. 定期的なブロック破棄を有効にする
systemd
タイマーを有効にすると、サポートされているすべてのファイル システムで未使用のブロックを定期的に破棄 できます。タイマーを
有効にして開始します。systemd
systemctl enable --now fstrim.timer
タイマーのステータスを確認します。
systemctl status fstrim.timer
● fstrim.timer - Discard unused blocks once a week
Loaded: loaded (/usr/lib/systemd/system/fstrim.timer; enabled; vendor preset: disabled)
Active: active (waiting) since Fri 2023-07-14 04:33:38 EDT; 1 day 5h ago
Docs: man:fstrim
Jul 14 04:33:38 localhost.localdomain systemd[1]: Started Discard unused blocks once a week.
4.6. Web コンソールを使用した VDO ボリュームの管理
4.6.1. Web コンソールをインストールして有効にする
cat /etc/redhat-release
Red Hat Enterprise Linux release 8.5 (Ootpa)
yum install cockpit
systemctl enable cockpit.socket --now
systemctl status cockpit.socket
firewall-cmd --permanent --add-service=cockpit
firewall-cmd --reload
ss -tnlp | grep 9090
LISTEN 0 128 *:9090 *:* users:(("systemd",pid=1,fd=28))
Web コンソールにログインします。
サーバーのrootアカウントとパスワードを入力するだけです
4.6.2. Web コンソールでの VDO ボリュームの作成
基本的に主要な操作は公式ガイドラインを参照してください。
4.6.3. Web コンソールでの VDO ボリュームのフォーマット
基本的に主要な操作は公式ガイドラインを参照してください。
4.6.4. Web コンソールでの VDO ボリュームの拡張
基本的に主要な操作は公式ガイドラインを参照してください。
5. AutoFS自動マウントサービス
Linux を使用する場合、ハードウェア リソースにアクセスするには、mount コマンドを使用してハードウェア リソースをマウントし、ディレクトリにマップする必要があります。これにより、ストレージ メディアにアクセスして使用できるようになります。Samba または NFS サービスを使用する場合は、リモート ストレージ デバイスもマウントする必要があります。マウントは外部記憶メディアやファイルシステムを利用する際に必要な作業ですが、マウントするリソースが多すぎるとネットワークリソースやサーバーリソースに一定の負荷がかかり、サーバーのパフォーマンスが低下します。
この問題を解決するために、autofs サービスを使用できます。autofs はシステム デーモンです。マウント情報を構成ファイルに書き込むことができます。ユーザーが他のストレージ メディアにアクセスしない場合、システムはマウントされません。ユーザーが他のストレージ メディアにアクセスしない場合、システムはマウントされません。ストレージ メディアにアクセスしようとすると、autofs はマウント操作を自動的に実行します。上記の操作はすべてユーザーに対して透過的です。このようにして、autofs サービスはサーバーのネットワーク リソースとハードウェア リソースを節約します。AutoFS は、ファイル システムを自動的にマウントするためのツールであり、通常は NFS (ネットワーク ファイル システム) マウントに使用されます。
手順は次のとおりです。
まず、NFS サーバーをサーバー b サーバーにインストールし、サーバー a の共有ストレージとして共有ディレクトリを作成します。
[root@serverb ~]# mkdir -p /rhome/ldapuser0
[root@serverb ~]# chmod 777 /rhome/ldapuser0/
[root@serverb ~]# vim /etc/exports
/rhome/ldapuser0 *(rw)
[root@serverb ~]# systemctl restart nfs-server.service
[root@serverb ~]# systemctl enable nfs-server.service
[root@serverb ~]# firewall-cmd --permanent --add-service=nfs
[root@serverb ~]# firewall-cmd --permanent --add-service=mountd
[root@serverb ~]# firewall-cmd --permanent --add-service=rpc-bind
[root@serverb ~]# firewall-cmd --reload
次に、servera に autofs をインストールし、システムにログインした後、NFS 共有ディレクトリを自動的にマウントできる ldapuser0 ユーザーを作成します。
[root@servera ~]# showmount -e serverb.lab.example.com
Export list for serverb.lab.example.com:
/rhome/ldapuser0 *
[root@servera ~]# useradd ldapuser0
[root@servera ~]# vim /etc/passwd
ldapuser0:x:1002:1002::/rhome/ldapuser0:/bin/bash
autofs サービスのメイン構成ファイルは /etc/auto.master です。開いた後、メイン構成ファイルに次の形式を記述する必要があります。
[root@servera ~]# yum install autofs.x86_64
[root@servera ~]# vim /etc/auto.master
/rhome /etc/auto.nfs
[root@servera ~]# vim /etc/auto.nfs
ldapuser0 -rw serverb.lab.example.com:/rhome/ldapuser0
[root@servera ~]# systemctl enable autofs.service --now
[root@servera ~]# systemctl restart autofs.service
検証効果: ldapuser0 ユーザーでログインした後、マウントされたファイルが、serververb の NFS 共有ファイルを自動的にマウントしていることを確認します。
[root@servera ~]# su - ldapuser0
Last login: Fri Sep 29 00:40:22 CST 2023 on pts/0
[ldapuser0@servera ~]$
[ldapuser0@servera ~]$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 887M 0 887M 0% /dev
tmpfs tmpfs 914M 0 914M 0% /dev/shm
tmpfs tmpfs 914M 17M 897M 2% /run
tmpfs tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/vda3 xfs 9.9G 1.6G 8.4G 16% /
/dev/vda2 vfat 100M 6.8M 94M 7% /boot/efi
tmpfs tmpfs 183M 0 183M 0% /run/user/1000
serverb.lab.example.com:/rhome/ldapuser0 nfs4 9.9G 1.6G 8.4G 16% /rhome/ldapuser0