job*_*324 5 linux ubuntu usb drive
我有一个 USB 驱动器安装到 Ubuntu 9.04 服务器安装的文件夹中。挂载选项存储在 /etc/fstab 中,以便于挂载/卸载:
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/sdb1 /media/backup ntfs nouser,auto,sync 0 3
Run Code Online (Sandbox Code Playgroud)
(我已经将部分更改为 UUID 以查看它是否有助于解决问题)。备份每天早上都在将文件复制到磁盘,没有问题。刚才我试图将其中一个文件复制到另一个文件夹,结果出现错误:
cp: reading `ts01-even.tgz': Input/output error
Run Code Online (Sandbox Code Playgroud)
我发现问题发生是因为/dev/sdb 已更改为/dev/sdc。如果我挂载 /dev/sdc 并尝试再次复制该文件,驱动器将变回 /dev/sdb。将 fstab 文件系统从 /dev/sdX1 更改为 UUID 后,行为没有区别。此外,我曾经能够列出 tarball 的文件内容,但现在尝试这样做会导致上述行为。有任何想法吗?
更新:
运行备份脚本并将备份存储在 USB HD 上不会产生问题,但在 tarball 中列出文件会产生问题。这是 tarball 命令“tar -ztf FILENAME”期间系统日志的输出:
Jul 3 15:09:14 ts01 kernel: [308398.446893] Buffer I/O error on device sdc1, logical block 786433
Jul 3 15:09:28 ts01 ntfs-3g[7468]: ntfs_attr_pread_i: ntfs_pread failed: Input/output error
Jul 3 15:09:28 ts01 ntfs-3g[7468]: Failed to read of MFT, mft=5 count=1 br=-1: Input/output error
Jul 3 15:09:28 ts01 kernel: [308412.404579] Buffer I/O error on device sdc1, logical block 786433
Jul 3 15:09:29 ts01 ntfs-3g[7468]: Unmounting /dev/sdc1 (FreeAgent Drive)
Jul 3 15:09:32 ts01 ntfs-3g[29176]: Version 2009.2.1 external FUSE 27
Jul 3 15:09:32 ts01 ntfs-3g[29176]: Mounted /dev/sdb1 (Read-Write, label "FreeAgent Drive", NTFS 3.1)
Jul 3 15:09:32 ts01 ntfs-3g[29176]: Cmdline options: rw,sync
Jul 3 15:09:32 ts01 ntfs-3g[29176]: Mount options: rw,sync,silent,allow_other,nonempty,relatime,fsname=/dev/sdb1,blkdev,blksize=4096
Jul 3 15:10:01 ts01 /USR/SBIN/CRON[29630]: (root) CMD ([ -x /usr/sbin/update-motd ] && /usr/sbin/update-motd 2>/dev/null)
Jul 3 15:11:35 ts01 kernel: [308539.310031] usb 1-1: reset high speed USB device using ehci_hcd and address 38
... (log repeated with a different address)
Jul 3 15:12:47 ts01 kernel: [308611.790038] usb 1-1: reset high speed USB device using ehci_hcd and address 38
Jul 3 15:12:49 ts01 kernel: [308613.148837] end_request: I/O error, dev sdb, sector 84779391
Jul 3 15:12:49 ts01 kernel: [308613.148871] Buffer I/O error on device sdb1, logical block 10597416
... (log repeated with a different address, with the logical block incrementing by 1 each time)
Jul 3 15:12:49 ts01 kernel: [308613.149090] Buffer I/O error on device sdb1, logical block 10597425
Jul 3 15:12:49 ts01 ntfs-3g[29176]: ntfs_attr_pread_i: ntfs_pread failed: Input/output error
Jul 3 15:12:49 ts01 ntfs-3g[29176]: ntfs_attr_pread error reading '/TS01_Backup/ts01-even.tgz' at offset 177012736: 131072 <> -1: Input/output error
Jul 3 15:12:49 ts01 ntfs-3g[29176]: ntfs_attr_pread_i: ntfs_pread failed: Input/output error
Jul 3 15:12:49 ts01 ntfs-3g[29176]: ntfs_attr_pread error reading '/TS01_Backup/ts01-even.tgz' at offset 177012736: 4096 <> -1: Input/output error
Run Code Online (Sandbox Code Playgroud)
我发现了一些似乎相关的东西,但按照说明进行操作并没有取得成效:FreeAgent Drives
你想调查udev。这负责在 /dev 下命名设备节点,您可以设置规则来为您的 USB 密钥指定一个唯一的名称。
您的配置似乎有很多问题。
将 USB 驱动器放在 fstab 中没有意义。Fstab 是系统存储设备及其挂载点的主要静态列表。您将静态驱动器/分区标识(基于控制器/设备地址)分配给静态安装点。对于 USB 驱动器,这些都不是真正静态的。在您的第一个示例中,如果您将第二个硬盘安装到系统中,您会遇到问题:它将成为 /dev/sdb,将您当前的 USB 驱动器移动到 /dev/sdc,从而在启动时破坏您的配置。
此外,将您的驱动器放在 fstab 中并使用“自动”选项告诉系统该驱动器将在启动时安装。如果由于任何原因驱动器在启动时断开连接,您的服务器将在启动过程中出现故障,这是一种非常不受欢迎的情况。如果驱动器不是系统运行所必需的,那么它至少不应该具有“自动”选项。
“nouser”选项是不必要的,它是默认的。“同步”选项是一个非常糟糕的主意,除非您真的知道自己在做什么。它不仅会严重影响性能,还会导致驱动器(尤其是闪存介质)的额外磨损。
fs_passno = 3(fstab 的第六列)导致未定义的行为。有效值仅为 0、1 或 2。
将 NTFS 与用于 Linux 服务器备份的驱动器一起使用。你为什么这样做?所有 Linux NTFS 实现都是次优的,不足以在其上运行任何 Linux 子系统。您应该使用本地 Linux 文件系统,例如 Ext3。
从您的内核日志中,我可以预测其中一个或多个可能是有效的:
您有一个错误分区的磁盘,即文件系统被格式化为错误的参数,大于实际分区;或者分区表中的分区(逻辑大小)大于驱动器的物理大小。这是来自您看到的“缓冲区 I/O 错误”。您应该考虑完全重置此磁盘,包括分区表,并从头开始重新分区和重新格式化。
您的磁盘中有一个坏扇区(“end_request:I/O 错误”)。您应该考虑badblocks在磁盘上运行以进行检查。
您的 USB 外壳工作不正常(来自“USB 重置”)。如果是外置硬盘,则应使用独立电源。USB 端口(有时)提供的 5V 500mA 不足以保持硬盘驱动器的运行。它也可能过热,特别是便宜的 USB 闪存驱动器。
NTFS 文件系统已损坏。修复它可能是可能的ntfsfix,但您应该再次记住,NTFS 不是本机 Linux 文件系统。为获得最佳结果,您需要一个 Windows 系统来正确检查此分区(使用磁盘扫描)。
其他建议包括:停止使用 NTFS 并选择本机 Linux 文件系统,从 fstab 中删除该条目,手动挂载磁盘作为备份脚本的一部分,完成后卸载它并使用 UUID 或文件系统标签来引用磁盘。
| 归档时间: |
|
| 查看次数: |
16587 次 |
| 最近记录: |