我正在使用 设置两个 RAID 1 阵列mdadm
,它似乎工作正常,但是当我进行检查时,lsblk
我看到以下内容:
sda 8:0 0 5,5T 0 disk
└─md127 9:127 0 5,5T 0 raid1
├─data-crypt-1 253:5 0 5,5T 0 crypt
│ └─myVg-data 253:6 0 5,5T 0 lvm
├─md127p1 259:5 0 182,4G 0 md
└─md127p2 259:6 0 1,2T 0 md
sdb 8:16 0 5,5T 0 disk
└─md127 9:127 0 5,5T 0 raid1
├─data-crypt-1 253:5 0 5,5T 0 crypt
│ └─myVg-data 253:6 0 5,5T 0 lvm
├─md127p1 259:5 0 182,4G 0 md
└─md127p2 259:6 0 1,2T 0 md
sdc 8:32 0 5,5T 0 disk
└─md126 9:126 0 5,5T 0 raid1
sdd 8:48 0 5,5T 0 disk
└─md126 9:126 0 5,5T 0 raid1
这些分区(?)在我md127p1
的md127p2
阵列中是什么?我应该删除它们吗?如果是,如何删除?
它似乎没有干扰阵列,它似乎正在按预期重新同步。但是我担心,例如,如果有人要挂载说md127p1
并向它写一些东西,它会破坏其中的数据data-crypt-1
(跨越整个驱动器)。
编辑:
重新启动和重新组装后问题(如果是问题)仍然存在。
sudo wipefs --no-act /dev/md127
# DEVICE OFFSET TYPE UUID LABEL
# md127 0x0 crypto_LUKS ba3eab9b-db06-4053-9eb8-4e674931148c
dmesg
md126
确实报告和之间的行为略有不同md127
。不知道如何检查“背景重建”。
dmesg | grep "md12[67]"
# [ 3.072445] md/raid1:md127: not clean -- starting background reconstruction
# [ 3.072445] md/raid1:md127: active with 2 out of 2 mirrors
# [ 3.107577] md127: detected capacity change from 0 to 6001039835136
# [ 3.112944] md127: AHDI p1 p2 p3
# [ 4.072578] md/raid1:md126: active with 2 out of 2 mirrors
# [ 4.105528] md126: detected capacity change from 0 to 6001039835136
# [ 175.221344] md127: AHDI p1 p2 p3
# [ 252.627169] md127: AHDI p1 p2 p3
# [ 337.950292] md127: AHDI p1 p2 p3
并udevadm
报告如下:
udevadm info /dev/md127p1
# P: /devices/virtual/block/md127/md127p1
# N: md127p1
# L: 100
# S: disk/by-id/md-name-XYZ:data-array-1-part1
# S: disk/by-id/md-uuid-94gd622:d96sf22:9fb73768:dae5367e-part1
# S: md/XYZ:data-array-1p1
# E: DEVLINKS=/dev/md/XYZ:data-array-1p1 /dev/disk/by-id/md-name-XYZ:data-array-1-part1 /dev/disk/by-id/md-uuid-94gd622:d96sf22:9fb73768:dae5367e-part1
# E: DEVNAME=/dev/md127p1
# E: DEVPATH=/devices/virtual/block/md127/md127p1
# E: DEVTYPE=partition
# E: MAJOR=259
# E: MD_DEVICES=2
# E: MD_DEVICE_ev_sda_DEV=/dev/sda
# E: MD_DEVICE_ev_sda_ROLE=0
# E: MD_DEVICE_ev_sdb_DEV=/dev/sdb
# E: MD_DEVICE_ev_sdb_ROLE=1
# E: MD_DEVNAME=XYZ:data-array-1
# E: MD_LEVEL=raid1
# E: MD_METADATA=1.2
# E: MD_NAME=XYZ:data-array-1
# E: MD_UUID=94gd622:d96sf22:9fb73768:dae5367e
# E: MINOR=5
# E: PARTN=1
# E: SUBSYSTEM=block
# E: SYSTEMD_WANTS=mdmonitor.service
# E: TAGS=:systemd:
# E: USEC_INITIALIZED=337999178
udevadm info /dev/md127p2
# P: /devices/virtual/block/md127/md127p2
# N: md127p2
# L: 100
# S: disk/by-id/md-name-XYZ:data-array-1-part2
# S: disk/by-id/md-uuid-94gd622:d96sf22:9fb73768:dae5367e-part2
# S: md/XYZ:data-array-1p2
# E: DEVLINKS=/dev/disk/by-id/md-name-XYZ:data-array-1-part2 /dev/disk/by-id/md-uuid-94gd622:d96sf22:9fb73768:dae5367e-part2 /dev/md/XYZ:data-array-1p2
# E: DEVNAME=/dev/md127p2
# E: DEVPATH=/devices/virtual/block/md127/md127p2
# E: DEVTYPE=partition
# E: MAJOR=259
# E: MD_DEVICES=2
# E: MD_DEVICE_ev_sda_DEV=/dev/sda
# E: MD_DEVICE_ev_sda_ROLE=0
# E: MD_DEVICE_ev_sdb_DEV=/dev/sdb
# E: MD_DEVICE_ev_sdb_ROLE=1
# E: MD_DEVNAME=XYZ:data-array-1
# E: MD_LEVEL=raid1
# E: MD_METADATA=1.2
# E: MD_NAME=XYZ:data-array-1
# E: MD_UUID=94gd622:d96sf22:9fb73768:dae5367e
# E: MINOR=6
# E: PARTN=2
# E: SUBSYSTEM=block
# E: SYSTEMD_WANTS=mdmonitor.service
# E: TAGS=:systemd:
# E: USEC_INITIALIZED=337999612
hexdump
显示:
sudo hexdump -C -n 512 /dev/md127
# *
# *
# 000001c0 7c e8 03 4d 62 32 d5 66 37 75 6b e9 12 6d 16 cc ||..Mb2.f7uk..m..|
# 000001d0 96 9e 6f 3d 32 e0 e7 fe 7f f4 9c a1 59 03 19 47 |..o=2.......Y..G|
# 000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
# *
我还注意到我在某些机器上看不到“幽灵”分区,尤其是我的 DietPi 机器上没有显示它们。它们确实显示在我的 Ubuntu 机器上。此外,我注意到两个阵列(md126 和 md127)都是在其中一台 DietPi 机器上创建的。
因此,这似乎是随机伪造分区表错误检测的情况。
这是 Atari / AHDI 分区表的示例(使用 parted 创建):
所以有趣的一点是 GEM、BGM、LNX、SWP、RAW 中偏移量 0x1c0/0x1d0 行中的一个,如 block/partitions/atari.c#L27-L32 所示:
这是 LUKS2 标头的示例:
所以恰好在相同的 0x1c0 / 0x1d0 行中有随机数据。
我的猜测是你在其中随机滚动了 GEM、BGM、LNX、SWP、RAW 之一,所以它看起来像内核的分区表,因此你检测到了你的怪异分区。
好消息是,对于 LUKS2 标头,这个偏移量似乎代表了标头校验和。每次您更改 LUKS2 标头中的任何内容时,它都会完全改变,因此...例如,您可以添加另一个密码。(如果您实际上不需要它,请将其删除)。
运行后相同的 LUKS2 标头
cryptsetup luksAddKey
:正如您所看到的,0x1c0/0x1d0 行中的数据与之前完全不同,所以如果运气好的话,您的虚假分区表也将消失(在重新读取分区表之后)。同时,这是值得关注的事情,因为未来对标题的任何更改都可能将其带回......
我假设您使用的是 LUKS2,因为旧的 LUKS1 标头不会在此偏移处存储随机数据,并且
luksFormat
还会像这样将其归零:所以这个问题甚至不应该出现在旧的 LUKS1 标头格式中。