赚取赏金的替代方法:向我展示如何将类似 ext4 的文件系统(可以存储大文件的 FS,我实际上并不需要 ext4 为此用例提供的所有好东西)存储在存储在(工作)FAT 格式分区上的许多小文件(<4 GiB)中。
我有一张 SD 卡(宣传为 64 GB,但其他存储介质的容量都小于这个数字(它只有 63'416'827'904 字节))和我的笔记本电脑(Acer Aspire VN7-591G-70CY)上的 SD 插槽。SD 卡可以毫无问题地与我之前的笔记本电脑配合使用,并且采用 ext4 格式。
我尝试过,
sudo modprobe -r r852; sudo modprobe -r sdhci_pci; sudo modprobe r852; sudo modprobe sdhci_pci
这对其他人有帮助,但对我没什么帮助。
SD 卡与 SD 卡转 USB 适配器配合使用。使用此适配器时,SD 卡为/dev/sdb
,其上的单个分区为/dev/sdb1
。当我将其放入 SD 卡插槽时,它为/dev/mmcblk0
,其分区为/dev/mmcblk0p1
。
当我将 SD 卡插入插槽时,nautilus 显示:
在 /media/christoph/e07d3be4-bd85-4eb2-9205-d6638ab37704 安装 /dev/mmcblk0p1 时出错:命令行 `mount -t "ext4" -o "uhelper=udisks2,nodev,nosuid" "/dev/mmcblk0p1" "/media/christoph/e07d3be4-bd85-4eb2-9205-d6638ab37704"' 以非零退出状态 32 退出:mount:错误的 fs 类型、错误的选项、/dev/mmcblk0p1 上的错误超级块、缺少代码页或帮助程序,或其他错误
In some cases useful info is found in syslog - try dmesg | tail or so.
手动安装它会导致几乎相同的错误消息:
挂载:错误的 fs 类型、错误的选项、/dev/mmcblk0p1 上的错误超级块、缺少代码页或辅助程序,或其他错误
In some cases useful info is found in syslog - try dmesg | tail or so.
现在奇怪的是,这dd
两种方法似乎都不起作用。我复制了 、 和 的前 100 MiB ,今天/dev/sdb
早些时候甚至得到了匹配的 sha256-sums。/dev/sdb1
/dev/mmcblk0
/dev/mmcblk0p1
它们现在不再匹配,但是非常相似,除了开头的一点点之外,几乎完全由零字节组成,尽管 SD 卡几乎完全满了(并且填充了压缩和加密的数据,所以应该没有太多的零字节)。
因此,我在十六进制编辑器中用纯文本替换了每个连续的 4 个零字节$mmcblk0
(我通过它复制的副本dd
与设备的名称完全相同,但在名称前面加了一个美元符号,以便可以区分),结果每个文件只有 129.4 kB r$sdb
(“r”代表“减少”/“替换”)和 312.7 kB,r$mmcblk0
而不是 104.9 MB。
r$sdb
开头有一个挂载点(我不知道为什么)。它实际上是 SD 卡挂载的挂载点。然后是随机出现的数据,重复次数很多,然后是一大堆 FF 字节,然后是保存在 SD 卡上的文件的实际名称,然后是一些随机出现的数据,但不多。
大约前 1600 字节r$mmcblk0
与 完全相同r$sdb
(这包括安装点,即使 SD 卡无法在插槽中安装)。然后是看似随机的数据,重复次数很多,但大块数据由可打印字符组成,包括文件路径,后面是 FF 字节,后面是与 的结尾完全相同的内容r$sdb
(SD 卡上保存的文件的实际名称,后面是一些看似随机的数据,但不多)。
你能帮助我解决这个问题并告诉我为什么dd
输出这些奇怪的数据吗?
我自己想出了如何让它与 FAT 一起工作。我运行apt-get install nfs-common
,重新启动,现在 FAT 正在工作。不幸的是,FAT 是一个糟糕的文件系统,不支持大量内容,我需要许多 GB 大小的文件,而 FAT 不支持这些文件。所以我根本无法将 SD 卡与 FAT 一起使用。
如果我使用 ext4 格式化分区,则会出现与之前相同的错误。对于 FAT,一切似乎都很好。
是否有命令可以使它也适用于 ext4?
$ sudo fdisk -l
Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 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
Disklabel type: gpt
Disk identifier: 2D8D2D1D-B17D-4F86-ACD1-743E6B376EFE
Device Start End Sectors Size Type
/dev/sda1 2048 1230847 1228800 600M Windows recovery environment
/dev/sda2 1230848 1845247 614400 300M EFI System
/dev/sda3 1845248 2107391 262144 128M Microsoft reserved
/dev/sda4 1716043776 1920843775 204800000 97.7G Microsoft basic data
/dev/sda5 1920843776 1953523711 32679936 15.6G Windows recovery environment
/dev/sda6 2107392 36923391 34816000 16.6G Linux swap
/dev/sda7 36923392 1716043775 1679120384 800.7G Linux filesystem
Partition table entries are not in disk order.
Disk /dev/mmcblk0: 59.1 GiB, 63416827904 bytes, 123860992 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: 0xd69abc36
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 2048 123860991 123858944 59.1G 83 Linux
Disk /dev/mapper/cryptswap1: 16.6 GiB, 17825267712 bytes, 34814976 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
$ lspci
00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor DRAM Controller (rev 06)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor PCI Express x16 Controller (rev 06)
00:02.0 VGA compatible controller: Intel Corporation 4th Gen Core Processor Integrated Graphics Controller (rev 06)
00:03.0 Audio device: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller (rev 06)
00:14.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB xHCI (rev 05)
00:16.0 Communication controller: Intel Corporation 8 Series/C220 Series Chipset Family MEI Controller #1 (rev 04)
00:1a.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #2 (rev 05)
00:1b.0 Audio device: Intel Corporation 8 Series/C220 Series Chipset High Definition Audio Controller (rev 05)
00:1c.0 PCI bridge: Intel Corporation 8 Series/C220 Series Chipset Family PCI Express Root Port #3 (rev d5)
00:1c.3 PCI bridge: Intel Corporation 8 Series/C220 Series Chipset Family PCI Express Root Port #4 (rev d5)
00:1d.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #1 (rev 05)
00:1f.0 ISA bridge: Intel Corporation HM86 Express LPC Controller (rev 05)
00:1f.2 SATA controller: Intel Corporation 8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode] (rev 05)
00:1f.3 SMBus: Intel Corporation 8 Series/C220 Series Chipset Family SMBus Controller (rev 05)
01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 860M] (rev a2)
07:00.0 Network controller: Intel Corporation Wireless 7265 (rev 48)
08:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)
我认为dmesg 的输出很有趣:
[10106.153215] mmc0: new ultra high speed SDR50 SDXC card at address 59b4
[10106.153349] mmcblk0: mmc0:59b4 SD 59.0 GiB
[10106.158564] mmcblk0: unknown partition table
[10109.748018] mmcblk0: p1
[10110.393758] mmcblk0: error -110 sending stop command, original cmd response 0x900, card status 0x900
[10111.098030] mmcblk0: error -110 sending stop command, original cmd response 0x900, card status 0x900
[10111.862596] mmcblk0: error -110 sending stop command, original cmd response 0x900, card status 0x900
[10111.862610] EXT4-fs (mmcblk0p1): Magic mismatch, very weird!
[10201.953257] mmcblk0: error -110 sending stop command, original cmd response 0x900, card status 0x900
[10202.553754] mmcblk0: error -110 sending stop command, original cmd response 0x900, card status 0x900
[10202.555661] EXT4-fs (mmcblk0p1): ext4_check_descriptors: Checksum for group 48 failed (26727!=0)
[10202.555664] EXT4-fs (mmcblk0p1): group descriptors corrupted!
答案1
在我看来,你的 SD 卡读卡器出现故障。数据丢失的概率非常高。FAT 可能因为错误检查功能较少而起作用,但这并不意味着没有错误!使用 FAT 时要极其谨慎。如果您要存储重要数据,请进行备份。或者,不要存储重要数据,或者只是使用 USB 读卡器。话虽如此,
尝试修复您的 SD 卡,这是一个标准程序:
sudo e2fsck -f -C 0 /dev/mmcblk0p1
e2fsck
是用于修复基于 ext 的文件系统的 Linux 实用程序。无论如何,我不指望它能起作用。
因此,正如另一个答案所暗示的那样,读卡器可能不支持这么大的驱动器。但 FAT 可以工作的事实表明这是可能的,但也有被搞砸的可能性。
您可以尝试以下方法,但我不知道它们是否有效:将其分区为两个或四个驱动器(如果适合您),然后继续使用 ext4。或者创建一个较小的分区并将其余部分留作可用空间?您可以尝试一下。
最后,由于 FAT 有效(记住,可能是因为它很少进行错误检查),exFAT 可以满足您存储大于 4 GB 的文件大小的要求。了解如何操作这里。
答案2
我认为问题是由于这个特定的 SD 读卡器无法读取容量为 64 GB 的 SD 卡,而您之前的笔记本电脑中的另一个读卡器显然可以读取这种卡。并非所有读卡器都具有相同的规格。当您购买读卡器时,文档中会说明读卡器可以处理的最大容量。当它已经放在笔记本电脑中时,您必须弄清楚它可以处理什么。目前限制通常为 32 GB。不幸的是,您无法更改此属性。
答案3
考虑到您添加到问题中的新信息,我对您采取了不同的方法。
在 GParted 中将卡上的分区格式化为 ext4。然后创建一个挂载点。我们假设这是 sd。因此,您需要执行以下操作:mkdir -p /media/sd
。
然后,要挂载它,您需要执行以下操作:mount -t ext4 -O noatime,nodiratime /dev/mmcblk0p1 /media/sd
。
上面的第二条命令应该在一行上。您可能必须在这些命令前面加上 sudo。您也可以在 /etc/fstab 中的第二条命令中使用标志。