奇怪的 USB 硬盘行为

奇怪的 USB 硬盘行为

我目前在使用新的外部 USB 硬盘时遇到了奇怪的行为,我认为该行为与安装问题、文件系统问题或实际硬件故障有关。如果我提到我为解决问题所做的事情以及我用来安装 USB 硬盘的方法,应该会对社区有所帮助。

文件系统

USB 硬盘在我的 Windows 机器上的虚拟机中用 Ubuntu 格式化。随后它被移至物理 Ubuntu 服务器。

USB 安装座

我安装了 USB Mount,sudo apt-get install usbmount之后我就能够浏览硬盘并通过 写入数据/media/usb

一切都很好直到...

我的硬盘上大约有 20GB 空间,之后通过 FTP 复制到设备时出现故障。现在奇怪的问题是,当我使用sudo cp filename和写入设备时,没有出现任何错误。通过 Flashfxp 报告的错误要么是磁盘已满,要么是读/写输入错误。

使用 Pmount

删除 USBMount 并使用 Pmount 并不能解决问题,除了删除 pmount 和 usbmount/media/usb0之外,我仍然可以看到我发现这很奇怪。/usb//media/usb0/

Fdisk 报告几个问题

下面是使用 fdisk 的报告,你可以看到,sdb 上似乎没有文件系统,这很奇怪,因为我可以查看它。使用 fdisk /dev/sdb/ 我无法查看任何分区,也无法删除它们,即使在创建分区时也是如此。

simon@Pluto2:/media/usb0$ sudo fdisk -l

Disk /dev/sda: 37.0 GB, 37019566080 bytes 255 heads, 63 sectors/track, 4500 cylinders, total 72303840 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 Disk identifier: 0x000c5772

   Device Boot      Start         End      Blocks   Id  System /dev/sda1   *        2048      499711      248832   83  Linux /dev/sda2          501758    72302591    35900417    5  Extended /dev/sda5          501760    72302591    35900416   8e  Linux LVM Note: sector size is 4096 (not 512)

Disk /dev/sdb: 2000.4 GB, 2000398929920 bytes 255 heads, 63 sectors/track, 30400 cylinders, total 488378645 sectors Units = sectors of 1 * 4096 = 4096 bytes Sector size (logical/physical): 4096 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk identifier: 0x0001b7d6

   Device Boot      Start         End      Blocks   Id  System

Disk /dev/mapper/Pluto2--vg-root: 32.6 GB, 32635879424 bytes 255 heads, 63 sectors/track, 3967 cylinders, total 63741952 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 Disk identifier: 0x00000000

Disk /dev/mapper/Pluto2--vg-root doesn't contain a valid partition table

Disk /dev/mapper/Pluto2--vg-swap_1: 4123 MB, 4123000832 bytes 255 heads, 63 sectors/track, 501 cylinders, total 8052736 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 Disk identifier: 0x00000000

Disk /dev/mapper/Pluto2--vg-swap_1 doesn't contain a valid partition table

运行 fsck

我在网上找到了几份指南,其中一份提到运行 fsck……不幸的是,这让我的问题更加困惑。

simon@Pluto2:/media/usb0$ sudo fsck /dev/sdb
fsck from util-linux 2.20.1
e2fsck 1.42.9 (4-Feb-2014)
ext2fs_open2: Bad magic number in super-block
fsck.ext2: Superblock invalid, trying backup blocks...
fsck.ext2: Bad magic number in super-block while trying to open /dev/sdb

The superblock could not be read or does not describe a valid ext2/ext3/ext4
filesystem.  If the device is valid and it really contains an ext2/ext3/ext4
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
    e2fsck -b 8193 <device>
 or
    e2fsck -b 32768 <device>

运行 e2fsck -b 8193 和 -b 32768

simon@Pluto2:/media/usb0$ sudo e2fsck -b 32768 /dev/sdb
e2fsck 1.42.9 (4-Feb-2014)
e2fsck: Bad magic number in super-block while trying to open /dev/sdb

The superblock could not be read or does not describe a valid ext2/ext3/ext4
filesystem.  If the device is valid and it really contains an ext2/ext3/ext4
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
    e2fsck -b 8193 <device>
 or
    e2fsck -b 32768 <device>

运行 smartctl -i

simon@Pluto2:/media/usb0$ sudo smartctl -d sat -i /dev/sdb
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Seagate Barracuda 7200.14 (AF)
Device Model:     ST2000DM001-1CH164
Serial Number:    XXXXXXXXXX
LU WWN Device Id: 5 000c50 06636209d
Firmware Version: CC49
User Capacity:    2,000,398,934,016 bytes [2.00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    7200 rpm
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ACS-2, ACS-3 T13/2161-D revision 3b
SATA Version is:  SATA 3.1, 6.0 Gb/s (current: 3.0 Gb/s)
Local Time is:    Tue Dec  9 21:31:44 2014 GMT

==> WARNING: A firmware update for this drive is available,
see the following Seagate web pages:
http://knowledge.seagate.com/articles/en_US/FAQ/207931en
http://knowledge.seagate.com/articles/en_US/FAQ/223651en

SMART support is: Available - device has SMART capability.
SMART support is: Enabled

运行 smartctl -d sat -t short /dev/sdb

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%       258

低于 20GB 标记

还值得一提的是,如果我删除 5gb 的数据,那么我可以毫无问题地将另外 5gb 写入设备。只有当驱动器使用到某个点时才会出现坏扇区,但我希望能够在设备上运行各种工具。

答案1

你的硬盘本身的某个扇区有问题硬盘问题需要修复您尝试重新使用它。

到目前为止,你所做的就是运行文件系统修复工具所有这些都假设他们有一个好的硬盘驱动器

如果你真的怀疑硬盘出现故障(这看起来像是),你应该运行badblocks

在这种情况下,我不会在分区上运行它,而是在整个驱动器上运行它并进行破坏性测试(如果可能的话)。

在运行以下命令之前请阅读man badblocks

badblocks 比磁盘低级格式化高一级,比 FS 格式化低一级。

我要做的是将其移动到物理机器(而不是虚拟机)并且:驱动器的设备名称在umount /dev/usb0&&badblocks /dev/usb0 -s -v -w哪里。usb0

上述命令将启动驱动器的 SMART 技术,尽可能替换坏扇区(如果 SMART 不执行任何操作,坏块的输出可用作输入mke2fs

再次重读整个对话:

这是一个新的驱动器:将其退回并换成另一个!

答案2

该驱动器在其他计算机或 Windows 上是否正常工作?您可以读取和写入整个驱动器吗?

我以前用过外置 USB 驱动器“盒”,插入 HD 或 cd/dvd 驱动器,Ubuntu(Linux Mint)通常将 HD 视为 /dev/sdc(例如),就像普通驱动器一样。不需要usbmountpmount,但也许你的驱动器更新或有点奇怪。是否有其他人拥有完全相同的驱动器,可以(或不能)在 Linux(Ubuntu、debian 等)上使用?

mount无论如何,当它被安装时,驱动器的格式是什么?使用&/或查看lsblk

有 MBR 或 GPT 吗?您在“整个”设备 /dev/sdb 上运行 fsck,而不是像 /dev/sdb1 这样的分区(但 fdisk 似乎看不到任何分区),但它在那里看不到任何 ext2/3/4 FS。在 /dev/sdb1 上使用 fsck 时是否仍会失败?一般来说,最好fsck在未安装的分区上运行。

对于 USB 硬盘,很难判断是软件/驱动程序问题,还是硬盘本身问题,还是外部“外壳”问题,还是 USB 线、集线器或插头问题……


新信息:我可能忽略了(几乎 TL;DR ;-) 一条可能有趣的信息:

USB 硬盘在我的 Windows 机器上的虚拟机中用 Ubuntu 格式化

由于一切都要经过 VM 程序,因此我对 VM 和 USB(或任何直接访问硬件)的运气一直不太好,这看起来像是这种奇怪行为的一大嫌疑犯……

答案3

作为 badblocks 的一个很好的替代方案,您可以尝试 diskscan(从终端:apt-get install diskscan)。它可以测量读取扇区的延迟时间,还可以报告坏扇区。延迟时间越长,发生错误的可能性就越大。

相关内容