背景:
我使用的是带有两个硬盘的 RAID1 配置。它是使用主板 (Asus x470 Prime Pro) 的 RAID 控制器设置的,它在 Windows 上运行良好,但由于缺少驱动程序,在 Linux 下无法使用。由于无法从 UEFI 的内置工具中“撤消”RAID 配置,我只需禁用 RAID 并将一个磁盘的所有内容移到左侧(因为前几百 MB 被 RAID 元数据占用)。我很好奇,简单地移动实际磁盘数据(当然还有分区表)是否可以工作,结果……它既可以工作,又不工作。
问题:
在 Linux (Debian) 和 Windows GUI 磁盘分区管理器中,当我检查我修改过的硬盘时,根本看不到任何分区。显然,它们也没有出现在文件系统中。
令人惊讶的是,在 Linux 下,一些命令行工具(如 fdisk 和 gdisk)可以正常显示分区。
fdisk:
Welcome to fdisk (util-linux 2.36).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sda1: 1.82 TiB, 2000381018112 bytes, 3906994176 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Alignment offset: 512 bytes
Disklabel type: gpt
Disk identifier: F7AE9EF0-19AC-4E53-B0F1-09179E8DFDAA
Device Start End Sectors Size Type
/dev/sda1p1 34 32767 32734 16M Microsoft reserved
/dev/sda1p2 32768 419770367 419737600 200.1G Microsoft basic data
/dev/sda1p3 419770368 2333446143 1913675776 912.5G Microsoft basic data
/dev/sda1p4 2333446144 2490693631 157247488 75G Microsoft basic data
Partition 1 does not start on physical sector boundary.
Partition 2 does not start on physical sector boundary.
Partition 3 does not start on physical sector boundary.
Partition 4 does not start on physical sector boundary.
Command (m for help): v
No errors detected.
Header version: 1.0
Using 4 out of 128 partitions.
A total of 1416300511 free sectors is available in 1 segment.
(我记得 fdisk 打印了一个错误,提示磁盘末尾没有写入 GPT 表的副本,但是它建议帮我修复,我希望它能解决这个问题 - 但是它没有,它只是让这个特定的错误不再打印。)
磁盘管理:
GPT fdisk (gdisk) version 1.0.5
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): p
Disk /dev/sda1: 3906994176 sectors, 1.8 TiB
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): F7AE9EF0-19AC-4E53-B0F1-09179E8DFDAA
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 3906994142
Partitions will be aligned on 8-sector boundaries
Total free space is 1416300511 sectors (675.3 GiB)
Number Start (sector) End (sector) Size Code Name
1 34 32767 16.0 MiB 0C01 Microsoft reserved ...
2 32768 419770367 200.1 GiB 0700 Basic data partition
3 419770368 2333446143 912.5 GiB 0700 Basic data partition
4 2333446144 2490693631 75.0 GiB 0700 Basic data partition
Command (? for help): v
Caution: Partition 1 doesn't begin on a 8-sector boundary. This may
result in degraded performance on some modern (2009 and later) hard disks.
Consult http://www.ibm.com/developerworks/linux/library/l-4kb-sector-disks/
for information on disk alignment.
No problems found. 1416300511 free sectors (675.3 GiB) available in 1
segments, the largest of which is 1416300511 (675.3 GiB) in size.
唯一似乎在检测分区方面有问题的命令行工具似乎是 partprobe:
sudo partprobe -s
/dev/sda: msdos partitions 1
/dev/sdb: msdos partitions 1
/dev/nvme0n1: gpt partitions 1 2 3 4 5 6
显然,/dev/sda 和 /dev/sdb 是我之前 RAID 配置中的 HDD,而 /dev/sda 是我损坏的 HDD。
如果我理解正确的话,fdisk 打印的有关分区“不在物理扇区边界上启动”的错误似乎并不真正相关,因为这看起来只是一个性能问题(由 gdisk 输出确认) - 即,无论如何都应该仍然可以使用这些分区。
我不知道这里可能出了什么问题 - 分区似乎真的没问题!在 BIOS 中有一些用于刷新的实用程序,允许浏览本地存储,从那里我确认我的文件和目录仍然完好无损地位于我从 RAID 手动“恢复”的 HDD 上。但话又说回来 - Linux 和 Windows 都无法在文件系统级别正确检测到它们......
答案1
感谢 kreemoweet 的评论,我才知道发生了什么。
事实证明,我意外地移动了错误的块设备数据 - /dev/sda1 而不是 /dev/sda。sda1 之所以存在,是因为出于某种原因,linux 将其视为一个大分区,从而为其创建了一个块设备。我的分区有点“嵌套”在其中,因此,当使用 /dev/sda1 作为要分区的设备时,虽然在分区工具中可见,但它们显然不会显示在文件系统中。
进行额外的转变(将分区表与真实磁盘设备对齐)解决了该问题。