我有一台 Raspberry PI,它通过 USB 连接了一个外部 1T 硬盘。如果 USB 驱动器以 FAT 格式格式化,则可以正常工作,但如果我将驱动器格式化为 ext4,则驱动器无法正确安装,并且会出现各种错误。这是我所做的:
fdisk -l
结果是
Device Boot Start End Blocks Id System
/dev/sda1 2 1953525167 976762583 83 Linux
然后我跑
mkfs.ext4 /dev/sda1
并且它运行并且没有任何错误。然后我通过以下方式安装驱动器
mount /dev/sda1 /mnt/external1
这需要一点时间,但返回时没有错误。这里发生了两件事。如果我执行 ls /mnt/external1,我会收到以下错误:
ls: reading directory /mnt/external1: Input/output error
发生的另一件事是,如果我执行 fdisk -l 我现在将得到以下信息:
Device Boot Start End Blocks Id System
/dev/sdb1 2 1953525167 976762583 83 Linux
我的磁盘现在已移动到 sdb1,如果我尝试挂载 sdb1,则会发生相同的错误并且磁盘会重新出现在 sda1 下。
我究竟做错了什么?
以下是 dmesg 的输出
[98931.054218] usb 1-1.2: New USB device found, idVendor=13fd, idProduct=1340
[98931.054254] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[98931.054274] usb 1-1.2: Product: External
[98931.054290] usb 1-1.2: Manufacturer: Generic
[98931.054308] usb 1-1.2: SerialNumber: 533144464256454C20202020
[98931.055405] usb-storage 1-1.2:1.0: USB Mass Storage device detected
[98931.058815] scsi12 : usb-storage 1-1.2:1.0
[98932.054219] scsi 12:0:0:0: Direct-Access Generic External 2.10 PQ: 0 ANSI: 4
[98932.055913] smsc95xx 1-1.1:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
[98932.056737] sd 12:0:0:0: [sdb] 1953525168 512-byte logical blocks: (1.00 TB/931 GiB)
[98932.058233] sd 12:0:0:0: [sdb] Write Protect is off
[98932.058270] sd 12:0:0:0: [sdb] Mode Sense: 21 00 00 00
[98932.059724] sd 12:0:0:0: [sdb] No Caching mode page found
[98932.059763] sd 12:0:0:0: [sdb] Assuming drive cache: write through
[98932.066927] sd 12:0:0:0: [sdb] No Caching mode page found
[98932.066967] sd 12:0:0:0: [sdb] Assuming drive cache: write through
[98932.090896] sdb: sdb1
[98932.096586] sd 12:0:0:0: [sdb] No Caching mode page found
[98932.096629] sd 12:0:0:0: [sdb] Assuming drive cache: write through
[98932.096654] sd 12:0:0:0: [sdb] Attached SCSI disk
[98935.392602] Buffer I/O error on device sda1, logical block 121667584
[98935.392632] lost page write due to I/O error on sda1
[98935.392651] JBD2: Error -5 detected when updating journal superblock for sda1-8.
[98935.392822] Aborting journal on device sda1-8.
[98935.392857] Buffer I/O error on device sda1, logical block 121667584
[98935.392872] lost page write due to I/O error on sda1
[98935.392887] JBD2: Error -5 detected when updating journal superblock for sda1-8.
[98970.278132] EXT4-fs warning (device sda1): __ext4_read_dirblock:908: error reading directory block (ino 2, block 0)
[98970.278186] EXT4-fs error (device sda1): __ext4_journal_start_sb:62: Detected aborted journal
[98970.300661] EXT4-fs (sda1): Remounting filesystem read-only
答案1
fdisk
通过调用交互式会话来创建我使用的分区sudo fdisk /dev/sda
很容易:
Command (m for help): d
Selected partition 1 Partition 1 has been deleted.
Command (m for help): n
Partition number (1-128, default 1): First sector (34-1953525134, default 2048): 34 Last sector, +sectors or
+size{K,M,G,T,P} (34-1953525134, default 1953525134):
Command (m for help): w
The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
接下来,我格式化了分区:
pi@retina:~ $ sudo mkfs.ext4 /dev/sda1
mke2fs 1.42.12 (29-Aug-2014) Creating filesystem with 244190637 4k blocks and 61054976 inodes Filesystem UUID: fe042d87-3266-44b5-beff-a98f70b783ed Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848
Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
Created a new partition 1 of type 'Linux filesystem' and of size 931.5 GiB.
最后我弹出了驱动器:
sudo eject /dev/sda
重新连接它,以便它现在出现在挂载表中。
答案2
我在尝试使用 ext4 和 Raspberry Pi (3) 格式化 USB 驱动器时也遇到了问题
sudo mkfs.ext4 /dev/sda1
(使用 fdisk 创建 gpt 表和 linux 分区后)
这是我的错误信息:
警告,写出超级块时遇到了麻烦。
然而 FAT 却发挥了作用。
因此,我尝试在另一台电脑上使用 gparted 格式化 USB 盘,当它成功时,我检查了 gparted 使用的命令,并尝试在我的 raspberry pi 上使用此命令格式化 USB 盘。它仍然需要一些时间(大约一分钟),但它成功了。
sudo mkfs.ext4 -F -O ^64bit -L "YOUR_LABEL" /dev/sda1
答案3
使用tune2fs
命令调整一些参数:
tune2fs -m 0 /dev/sda1
tune2fs -L bakap01 /dev/sda1
-m 选项用于调整保留块的百分比。保留块由特权进程使用,默认情况下为硬盘大小的 5%。(我假设)由于您仅将外部硬盘用作存储,因此我将其设置为 0,以便我也可以使用这 5% 进行存储。-L 选项用于标记文件系统。
答案4
您也可以将其用于parted
此目的。我用 parted 将两个外部磁盘格式化为 ext4,它们运行良好。
插入设备前运行ls -t /dev | grep sd
,插入后再次运行并记下设备号(我将使用 sdX)。如果驱动器已自动安装,请卸载驱动器(安装时它将具有分区号):
sudo umount /dev/sdX1
以 root 身份运行不带分区号的 parted:
sudo parted /dev/sdX
mklabel gpt
mkpart primary
mkpart primary ext 0% 100%
quit
并格式化它(带分区号):
mkfs.ext4 /dev/sdX1
现在插入和拔出设备,如果没有自动安装,请以 root 身份安装。请注意,由于 Rpi 是低功耗设备,USB 端口不会为没有单独电源的外部 HDD 供电。