我在 RHEL-7 上遇到了一个奇怪的情况。我在磁盘分区上创建了一个设备映射器 (crypt),然后将数据 (字节) 从磁盘分区复制到映射器。blkid 输出有两个 UUID 条目 - 一个用于磁盘分区,另一个用于映射器。/dev/disk/by-uuid 下的 UUID 指向映射器,因为它已被覆盖。
blkid 输出:
/dev/sdc1: UUID="1e762c4a-0b12-40fc-9f53-a825016211a0" TYPE="ext4"
/dev/mapper/my_mapper: UUID="1e762c4a-0b12-40fc-9f53-a825016211a0" TYPE="ext4"
/dev/disk/by-uuid 输出:
lrwxrwxrwx 1 root root 10 Jan 31 10:24 1e762c4a-0b12-40fc-9f53-a825016211a0 -> ../../dm-4
现在,我再次将数据(字节)从映射器复制到磁盘分区并关闭映射器。 /dev/disk/by-uuid 下的 UUID 指向磁盘分区,blkid 输出显示磁盘分区的 UUID。
blkid 输出:
/dev/sdc1: UUID="1e762c4a-0b12-40fc-9f53-a825016211a0" TYPE="ext4"
/dev/disk/by-uuid 输出:
lrwxrwxrwx 1 root root 10 Jan 31 10:24 1e762c4a-0b12-40fc-9f53-a825016211a0 -> ../../sdc1
但是,一旦我尝试挂载磁盘分区,就会出现错误:
mount -t ext4 -o rw /dev/sdc1 /mnt/plainDisk
mount: wrong fs type, bad option, bad superblock on /dev/sdc1.
然后磁盘从 blkid 输出中消失。 /dev/disk/by-uuid 仍然存在且具有正确的 UUID,并且 lsblk 显示该磁盘。
我正在用来blockdev --getsize64
获取磁盘的大小(以字节为单位),然后复制所有这些字节。
任何意见或建议都值得赞赏。不过我在 RHEL-6 上没有遇到这个问题。
附加信息:
- 一旦所有数据都被复制,我就会使用
fsync
/dev/sdc1 文件描述符。 - 当第二次复制后 /dev/sdc1 存在时,我验证了 dumpe2fs 的输出。它与原始值匹配。但是,一旦删除该条目,dumpe2fs 就会给出错误:
dumpe2fs 1.42.9(2013 年 12 月 28 日)
dumpe2fs:尝试打开 /dev/sdc1 时超级块中的幻数错误
找不到有效的文件系统超级块。
答案1
问题是,在将数据从 复制回my_mapper
时sdc1
,my_mapper
仍然安装。这在某种程度上影响了设备上的超级块。我运行dumpe2fs
并检查了一些与山在超级块中。
在复制数据之前卸载映射器可以解决问题。