我遇到过一个问题,所有分区工具都将我的 SD 卡视为 30 GB 大小的卡。但是当我购买该卡时,我清楚地记得该卡有 64 GB,而且卡上写着“ScanDisk Ultra 64 GB”。在我决定使用 ext4 文件系统重新格式化 SD 卡后,最大容量发生了变化(之前的文件系统是 exFAT)。然后无论我尝试做什么,都无法帮助我恢复容量。我尝试了 gparted、fdisk,甚至尝试使用 Windows 工具 SDFormatterv4 和 diskpart。但我在 VirtualBox 下使用 Windows 工具,因为我的主要操作系统是 Ubuntu。我没有在物理驱动器上预装 Windows 操作系统。我在 Google 上搜索并找到了解决方案,当 Windows 确实只看到 SD 卡上的第一个分区时。但我认为这不是我的情况,因为我至少不使用 Windows。但无论如何,我尝试了那些解决方案,但都没有帮助我。如何将容量恢复到原始大小?
根据 ByteCommander 的要求添加
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 698.7G 0 disk
├─sda1 8:1 0 171.2G 0 part /
├─sda2 8:2 0 7.6G 0 part
├─sda3 8:3 0 163G 0 part
└─sda4 8:4 0 356.9G 0 part /home
sdb 8:16 1 27.5G 0 disk
sr0 11:0 1 1024M 0 rom
# parted -l
... /dev/sda skipped ...
Model: Generic USB SD Reader (scsi)
Disk /dev/sdb: 29.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
我通过 SD 读卡器连接 SD 卡。你可以看到 /dev/sdb 根本没有分区
应 zhongfu 要求添加
# dmesg | tail -n 20
[ 9203.022463] usb 2-5: New USB device found, idVendor=090c, idProduct=6200
[ 9203.022475] usb 2-5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 9203.022482] usb 2-5: Product: Generic USB2.0 card
[ 9203.022487] usb 2-5: Manufacturer: Silicon Motion, Inc.
[ 9203.022492] usb 2-5: SerialNumber: 12345678901234567890
[ 9203.022997] usb-storage 2-5:1.0: USB Mass Storage device detected
[ 9203.024017] scsi17 : usb-storage 2-5:1.0
[ 9204.024052] scsi 17:0:0:0: Direct-Access Generic USB SD Reader 1.00 PQ: 0 ANSI: 0 CCS
[ 9204.024780] sd 17:0:0:0: Attached scsi generic sg2 type 0
[ 9204.027078] sd 17:0:0:0: [sdb] 57626624 512-byte logical blocks: (29.5 GB/27.4 GiB)
[ 9204.030200] sd 17:0:0:0: [sdb] Write Protect is off
[ 9204.030205] sd 17:0:0:0: [sdb] Mode Sense: 4b 00 00 08
[ 9204.031340] sd 17:0:0:0: [sdb] No Caching mode page found
[ 9204.031344] sd 17:0:0:0: [sdb] Assuming drive cache: write through
[ 9204.034209] sd 17:0:0:0: [sdb] No Caching mode page found
[ 9204.034212] sd 17:0:0:0: [sdb] Assuming drive cache: write through
[ 9204.049098] sdb:
[ 9204.051865] sd 17:0:0:0: [sdb] No Caching mode page found
[ 9204.051876] sd 17:0:0:0: [sdb] Assuming drive cache: write through
[ 9204.051885] sd 17:0:0:0: [sdb] Attached SCSI removable disk
神奇 :-( 64 Gb 消失了。这是我的 SD 卡及其读卡器的照片
应 Rod Smith 要求添加
# hdparm -N /dev/sdb
/dev/sdb:
SG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
SG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
max sectors = 0/1, HPA is enabled
编辑
我努力回忆,并在你们的帮助下找到了答案!
感谢 NGRhodes 让我重新思考
我第一次购买卡时没有在电脑上检查我的 SD 卡是否有 64 GB 容量。只有我的相机显示我可以录制 9 小时的视频。如果我插入 32 GB 的 SD 卡,我的相机显示我可以录制 4 小时的视频。这意味着一张卡比另一张卡大。此外,64 GB 和 32 GB 卡上分别有标题。因此,根据这些事实,我得出结论,一张卡是 32GB,另一张是 64GB。
但是当我将 64GB 卡插入 PC 时,我发现它只有 30 GB。我开始错误地将其与使用 ext4 文件系统格式化相关联(因为我在检查大小之前就格式化了)!为什么我认为这是个错误?因为我将 SD 卡重新格式化为 exFat,然后在 PC 上检查大小,它仍然约为 30GB。然后我插入我的相机。我的相机显示我可以录制 9 小时的视频,而使用 32GB 卡只能录制 4 小时!这意味着容量没有丢失。
那么问题来了,到底是相机还是 PC 造成了问题?看来 HPA 是根本原因,而且 PC 占用了我的 SD 卡的一些空间。
编辑2
我尝试在 Android 设备上格式化 SD 卡。最后 PC 显示 64GB
# dmesg | tail -n 20
[15394.096958] usb-storage 2-5:1.0: USB Mass Storage device detected
[15394.097115] scsi22 : usb-storage 2-5:1.0
[15395.097725] scsi 22:0:0:0: Direct-Access Generic USB SD Reader 1.00 PQ: 0 ANSI: 0 CCS
[15395.097962] sd 22:0:0:0: Attached scsi generic sg2 type 0
[15395.099192] sd 22:0:0:0: [sdb] 57626624 512-byte logical blocks: (29.5 GB/27.4 GiB)
[15395.099822] sd 22:0:0:0: [sdb] Write Protect is off
[15395.099824] sd 22:0:0:0: [sdb] Mode Sense: 4b 00 00 08
[15395.100449] sd 22:0:0:0: [sdb] No Caching mode page found
[15395.100452] sd 22:0:0:0: [sdb] Assuming drive cache: write through
[15395.108424] sd 22:0:0:0: [sdb] No Caching mode page found
[15395.108427] sd 22:0:0:0: [sdb] Assuming drive cache: write through
[15395.123181] sdb: sdb1
[15395.123185] sdb: p1 size 124733440 extends beyond EOD, enabling native capacity
[15395.125048] sd 22:0:0:0: [sdb] No Caching mode page found
[15395.125056] sd 22:0:0:0: [sdb] Assuming drive cache: write through
[15395.125836] sdb: sdb1
[15395.125847] sdb: p1 size 124733440 extends beyond EOD, truncated
[15395.129559] sd 22:0:0:0: [sdb] No Caching mode page found
[15395.129570] sd 22:0:0:0: [sdb] Assuming drive cache: write through
[15395.129578] sd 22:0:0:0: [sdb] Attached SCSI removable disk
# df -h | grep sdb
/dev/sdb1 60G 20K 60G 1% /media/alek/C8AE-0ADD
但 HPA 仍处于启用状态
# hdparm -N /dev/sdb
/dev/sdb:
SG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
SG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
max sectors = 0/1, HPA is enabled
EDIT3摘要
我买了卡。相机显示,使用新卡录制的视频比使用 32GB 大小的旧卡录制的视频长(两倍)。
我在电脑上用 ext4 文件系统格式化了 SD 卡。我第一次检查了容量,大约是 30 GB。
我用 exFat 格式化了 SD 卡。我在 PC 上检查了容量。它仍然大约有 30GB。我将 SD 卡插入相机。相机显示我可以比以前使用 32GB 卡录制更长时间的视频。
我在 Android 设备上重新格式化了 SD 卡。Android 设备显示该卡容量为 60 GB。然后我将卡插入 PC。PC 开始显示正确的容量 - 60GB。
根据 Rinzwind 的要求添加
它是在我格式化 Android 设备后添加的。因此显示大约 64GB。
# sgdisk --print /dev/sdb
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory.
***************************************************************
Warning! Secondary partition table overlaps the last partition by
67108897 blocks!
You will need to delete this partition or resize it in another utility.
Disk /dev/sdb: 57626624 sectors, 27.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): B5FDFA69-32D4-42B0-B8A3-B14DF7A513B5
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 57626590
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 124735487 59.5 GiB 0700 Microsoft basic data
编辑4
- 我创建了一个文件-1GB大小。
dd if = / dev / zero of = 1gb_file bs = 1024 count = 1048576
将其复制到 SD 卡 60 次
对于 i 在
seq 1 60
;执行 echo -n ($i) ; cp -v 1gb_file /media/alek/C8AE-0ADD/$i ; 完成(1)«1gb_file» -> «/media/alek/C8AE-0ADD/1» (2)«1gb_file» -> «/media/alek/C8AE-0ADD/2» (3)«1gb_file» -> «/media/alek/C8AE-0ADD/3»
...
(57)«1gb_file» -> «/media/alek/C8AE-0ADD/57» (58)«1gb_file» -> «/media/alek/C8AE-0ADD/58» (59)«1gb_file» -> «/media/alek/C8AE-0ADD/59»
(60)«1gb_file» -> «/media/alek/C8AE-0ADD/59»
cp:写入‘/media/alek/C8AE-0ADD/60’时出错:设备上没有剩余空间
cp:无法扩展“/media/alek/C8AE-0ADD/60”:设备上没有剩余空间
只有最新的命令失败,因为磁盘已满。所以我只能将大约 60 GB 写入我的 SD 卡。
- 然后我尝试将它们复制回去。这个测试也通过了。所以我不认为 SD 卡是假的。
编辑5,正如 psusi 所问。在我格式化 Android 设备之后。
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 698,7G 0 disk
├─sda1 8:1 0 171,2G 0 part /
├─sda2 8:2 0 7,6G 0 part
├─sda3 8:3 0 163G 0 part
└─sda4 8:4 0 356,9G 0 part /home
sdb 8:16 1 27,5G 0 disk
└─sdb1 8:17 1 27,5G 0 part /media/alek/C8AE-0ADD
sr0 11:0 1 1024M 0 rom
EDIT6 按照 psusi 的要求
# dd if=/dev/sdb of=/dev/null
57626624+0 records in
57626624+0 records out
29504831488 bytes (30 GB) copied, 1518,73 s, 19,4 MB/s
结论。
这是 SD 卡读卡器的问题。
答案1
我想我现在就把我的结论写出来作为答案。简而言之,你的 USB SD 卡读卡器有缺陷。它报告说卡的大小比实际要小。当你在 Android 设备中格式化卡(使用其全部容量),然后将其安装到电脑上时,你无法正确访问整个磁盘,因此文件很快就会损坏。
退回或丢弃您当前的读卡器并购买一个可以正确识别卡的全部容量的新读卡器。
答案2
我认为您的 SD 卡读卡器是 HC 标准,因此它可以读取最大 32 GB 的 SD 卡,对于更大容量的 SD 卡,您需要 XC 标准读卡器。