23.2. 删除块设备和相关的元数据
要从正在运行的系统中安全地删除块设备,以防止系统内存过载和数据丢失,您需要首先从它们中删除元数据。从文件系统开始,处理堆栈中的每一层,然后继续处理磁盘。这些操作可防止将您的系统置于不一致的状态。
根据您要删除的设备类型,使用的特定命令可能有所不同:
-
lvremove
、vgremove
和pvremove
特定于 LVM。 -
对于软件 RAID,请运行
mdadm
以删除阵列。如需更多信息,请参阅 管理 RAID。 - 对于使用 LUKS 加密的块设备,有特定的额外步骤。以下流程对于使用 LUKS 加密的块设备不适用。如需更多信息,请参阅 使用 LUKS 加密块设备。
重新扫描 SCSI 总线或执行更改操作系统状态的其他操作,而无需遵循这个流程,因为 I/O 超时、设备被意外删除或数据丢失。
先决条件
- 您有一个现有的包含文件系统、逻辑卷和卷组的块设备堆栈。
- 您确保没有其他应用程序或服务正在使用您要删除的设备。
- 备份您要删除的设备中的数据。
可选:如果要删除多路径设备,且您无法访问其路径设备,请运行以下命令禁用多路径设备的队列:
# multipathd disablequeueing map multipath-device
这可让设备的 I/O 失败,允许使用该设备的应用程序关闭。
一次一层地删除设备及其元数据可确保不会在磁盘上保留过时的签名。
流程
卸载文件系统:
# umount /mnt/mount-point
删除文件系统:
# wipefs -a /dev/vg0/myvol
如果您已在
/etc/fstab
文件中添加了一个条目,以便在文件系统和挂载点之间建立持久关联,请在此时编辑/etc/fstab
以删除该条目。根据您要删除的设备类型,继续执行以下步骤:
删除包含文件系统的逻辑卷(LV):
# lvremove vg0/myvol
如果卷组中没有其他的逻辑卷(VG),您可以安全地删除包含该设备的 VG:
# vgremove vg0
从 PV 设备中删除物理卷(PV)元数据:
# pvremove /dev/sdc1
# wipefs -a /dev/sdc1
删除包含 PV 的分区:
# parted /dev/sdc rm 1
如果要完全擦除该设备,请删除分区表:
# wipefs -a /dev/sdc
只有在您要物理删除该设备时才执行以下步骤:
如果您要删除多路径设备,请执行以下命令:
查看该设备的所有路径:
# multipath -l
稍后需要这个命令的输出。
清除 I/O 并删除多路径设备:
# multipath -f multipath-device
如果该设备没有配置为多路径设备,或者设备配置为多路径设备,并且您之前将 I/O 传递给单个路径,请将任何未完成的 I/O 刷新到所有使用的设备路径:
# blockdev --flushbufs device
对于直接访问的设备非常重要,
umount
或vgreduce
命令不会清除 I/O。如果您要删除 SCSI 设备,请执行以下命令:
-
删除对基于路径的设备名称的任何引用,如
/dev/sd
、/dev/disk/by-path
或major:minor
number(在系统上的应用程序、脚本或工具中)。这样可保证以后添加的不同设备不会为当前的设备错误。 从 SCSI 子系统中删除该设备的每个路径:
# echo 1 > /sys/block/device-name/device/delete
此处,如果设备之前被用作多路径设备,则
device-name
可从multipath -l
命令的输出中检索到。
-
删除对基于路径的设备名称的任何引用,如
- 从正在运行的系统中删除物理设备。请注意,当您删除此设备时,I/O 到其它设备不会停止。
验证
验证您要删除的设备是否没有在
lsblk
命令的输出中显示。以下是一个输出示例:# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 5G 0 disk sr0 11:0 1 1024M 0 rom vda 252:0 0 10G 0 disk |-vda1 252:1 0 1M 0 part |-vda2 252:2 0 100M 0 part /boot/efi `-vda3 252:3 0 9.9G 0 part /
其他资源
-
multipath (8)
,pvremove (8)
,vgremove (8)
,lvremove (8)
,wipefs (8)
,parted (8)
,blockdev (8)
和umount (8)
man pages