Answers:
使用ext4时,可以使用命令
e2fsck -c /dev/sda1
或其他命令检查坏块。通过将它们添加到坏块索引节点中,这会将这些块“黑名单”。
e2fsck -c
badblocks
在基础硬盘上运行。您可以badblocks
直接在LVM物理卷上使用该命令(假设PV实际上是硬盘,而不是MD软件RAID设备之类的其他虚拟设备),就像在硬盘上使用该命令一样包含一个ext文件系统。
这不会在文件系统中添加任何种类的坏块信息,但是我真的不认为这是文件系统的有用功能;硬盘应该处理坏块。
甚至比badblocks
在磁盘上运行SMART自检更好(用硬盘/dev/sdX
的设备名称代替):
smartctl -t long /dev/sdX
smartctl -a /dev/sdX | less
测试本身将花费几个小时(它将告诉您确切的时间)。完成后,您可以使用查询查询结果smartctl -a
,以查找自检日志。如果显示“成功完成”,则您的硬盘正常。
换句话说,如何检查在LVM中不使用的坏块?
就像我说的那样,硬盘本身将确保它不使用损坏的块,并且还将从这些块中重定位数据。这不是文件系统或LV要做的事情。另一方面,当您的硬盘上有多个坏块时,您不希望将其重新定位,而是要替换整个硬盘,因为它会发生故障。
dd
。实际上,这种介质实际上是可以使用的,并且数据只是被破坏了,所以比您想像的要多得多,因此无需重新映射就可以很好地进行写操作。
我很确定LVM不会处理坏块。它期望基础存储。大多数(如果不是全部)现代硬盘都可以。您可能需要对扇区执行写操作,但是磁盘应重新映射它。(您可能需要先使用进行离线表面扫描smartctl /dev/sda -t offline
)。
就是说,LVM实际上不会移动数据,除非您使用例如询问pvmove
。因此,您可以使用ext4 badblocks功能;如果运行,则只需重新检查是否有坏块pvmove
。没有通用操作(例如lvextend
)移动数据。
扩展不会移动数据,因为LVM会保留一个地图,上面写着“逻辑扩展区0–99是物理扩展区200–299”,然后在扩展它时,它只会添加“逻辑扩展区100–199是物理扩展区100–199”。甚至“逻辑扩展区100-149是物理扩展区50-99;逻辑扩展区150-199是物理扩展区140-189”。LVM不在乎物理范围是否不按顺序排列或不连续。
pvck
可以检查LVM元数据之后,一致性是文件系统的工作。LVM仅与卷管理有关,因此它不需要关心构成特定范围的空间是否不良,因为更高级别的软件可以解决这些问题。无论如何,LVM元数据仅占据物理卷的第一个(可选地,还包含最后一个扇区)。
如果只有相当大的PV的第一个和最后一个部门(例如您在生产中看到的)恰好同时发生故障,那么您基本上是世界上运气最差的一家,因为从天文学角度来看这不太可能。否则,如果管理员知道驱动器的多个扇区出现了故障,那么大多数人都可以在“硬盘驱动器永久故障并需要更换”下进行归档。
如果pvck
返回错误,则可以检查LVM元数据是否已备份到/etc/lvm
某处。如果是这样,您可以pvcreate
指定备份副本到--restorefile
句法:
pvcreate --uuid "<UUID-of-target-PV>" --restorefile <Path-To-Metadata-Backup-File> <path-to-PV-block-device>
例:
pvcreate --uuid "2VydVW-TNiN-fz9Y-ElRu-D6ie-tXLp-GrwvHz" --restorefile /etc/lvm/archive/vg_raid_00000-1085667159.vg /dev/sda2
如果还原无法正常工作(例如,如果第一个扇区坏了),则可以重新执行上述操作,但是可以设置--metadatacopies 2
(或者您可以直接这样做),尝试将元数据写入第一个和PV上的最后一个扇区。它何时pvscan
在启动时会检查两个位置,如果找到元数据,则会针对校验和验证它们。如果校验和在第一个扇区上失败,但在最后一个扇区上成功,您将收到一条非致命错误消息。
有点手册和痛苦,但这又是人们很高兴能够使用BTRFS进行卷管理还原的部分原因。在大多数情况下,由于derobert提到的原因,这并不是真正重要的问题,因为绝对需要确保数据连续性的人们通常会使用RAID并拥有备份策略。
-c
在调用完全废话之前的操作。