我通过 Android 手机的 USB 共享使用 GParted 格式化了 SD 卡。
手机和电脑都无法识别 SD 卡上的分区。当我通过 USB 共享 SD 卡时,设备显示为 /dev/sdb,但 fdisk 无法识别它。
Mount 说:
#mount /dev/mmcblk0p1 -t auto /home/alex/tmp/mount1/
NTFS signature is missing.
Failed to mount '/dev/mmcblk0p1': Invalid argument
The device '/dev/mmcblk0p1' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?
我如何挂载 SD 卡上的内容来恢复我的数据?当我格式化 SD 卡时,它在挂载时显示为块设备,我可以清楚地看到原始的 FAT32,因此我假设 /dev/mmcblk0p1 分区内保留了一个 fs 结构。
文件和 fdisk 的输出:
# file /dev/mmcblk0
/dev/mmcblk0: block special (179/0)
# file /dev/mmcblk0p1
/dev/mmcblk0p1: block special (179/1)
# fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 29.6 GiB, 31812747264 bytes, 62134272 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 8192 62134271 62126080 29.6G c W95 FAT32 (LBA)
# fdisk -l /dev/mmcblk0p1
Disk /dev/mmcblk0p1: 29.6 GiB, 31808552960 bytes, 62126080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc38c655c
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1p1 2048 51193855 51191808 24.4G b W95 FAT32
/dev/mmcblk0p1p2 51193856 62126079 10932224 5.2G 83 Linux
/dev/mmcblk0p1 似乎包含 ~24.5 GiB vfat 和 ~5 GiB ext4。所以我相信结论是 SD 卡包含什么应该是一个 30 GiB 的 vfat 分区,但实际上是另一个包含两个分区的块。这和我所做的完全一致,但我不知道如何恢复数据。
答案1
fdisk 输出
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1p1 2048 51193855 51191808 24.4G b W95 FAT32
/dev/mmcblk0p1p2 51193856 62126079 10932224 5.2G 83 Linux
确认所谓的分区实际上是包含格式化磁盘的块。
Mount 接受偏移量作为参数,因此快速近似计算扇区大小的方法为 25 GiB 除以扇区数:24.4 ⋅ 1024 ⋅ 1024 ⋅ 1024 / (51193855-2048) ≈ 511,78698。因此分区从字节 512 ⋅ 2048 开始。使用正确的偏移量挂载分区,然后备份所有数据并使用 gparted 正确格式化 SD 卡:
# mount -t auto -o offset=1048576,ro /dev/mmcblk0p1 /home/alex/tmp/mount1/