我有一个USB驱动器挂载到Ubuntu 9.04服务器安装的文件夹。 安装选项存储在/ etc / fstab中,便于安装/拆卸:
# <file system> <mount point> <type> <options> <dump> <pass> /dev/sdb1 /media/backup ntfs nouser,auto,sync 0 3
(我已经把这个部分改成了UUID,看看它是否有助于解决问题)。 备份已经每天早上将文件复制到磁盘没有问题。 刚才我试图将其中一个文件复制到另一个文件夹,最后出现错误:
cp: reading `ts01-even.tgz': Input/output error
我发现问题发生了,因为/ dev / sdb改为/ dev / sdc。 如果我挂载/ dev / sdc并尝试再次复制该文件,则该驱动器将变回到/ dev / sdb。 将fstab文件系统从/ dev / sdX1更改为UUID后,行为没有任何区别。 此外,我曾经能够列出压缩包的文件内容,但现在尝试这样做会导致上述行为。 有任何想法吗?
更新:
运行备份脚本并将备份存储在USB HD上不会产生问题,但将文件列在tarball中。 以下是tarball命令“tar -ztf FILENAME”中syslog的输出:
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
我发现了一些看似相关的东西,但是按照说明书没有certificate是有效的: FreeAgent驱动器
有很多东西在configuration上看起来不对。
将USB驱动器放在fstab中没有任何意义。 Fstab是系统存储设备及其挂载点的大部分静态列表。 将静态驱动器/分区标识(基于控制器/设备地址)分配给静态挂载点。 USB驱动器都不是静态的。 在你的第一个例子中,如果你为系统安装了第二个硬盘,你将会遇到问题:它会变成/ dev / sdb,将当前的USB驱动器移动到/ dev / sdc,从而在启动时破坏你的configuration。
另外,使用fstab和“auto”选项让驱动器告诉系统,驱动器将在启动时被安装。 如果由于任何原因,驱动器在启动时断开连接,则会导致服务器在启动过程中失败,这是一个非常不理想的情况。 如果驱动器不是系统工作所必需的,那么至less不应该有“自动”选项。
“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电stream不足以保持硬盘机的运行。 这也可能是过热,特别便宜的USB闪存驱动器。
NTFS文件系统已损坏。 修复ntfsfix
可能是可能的,但你应该记住, NTFS不是本地Linux文件系统 。 为了获得最佳效果,您需要一个Windows系统来正确检查此分区(使用Scandisk)。
其他build议包括:停止使用NTFS并select本地Linux文件系统,从fstab中删除该条目,将该磁盘作为备份脚本的一部分手动挂载,在完成后将其卸载并使用UUID或文件系统标签来引用该磁盘。
你想调查udev。 这是负责命名/ dev下的设备节点,您可以设置规则给你的USB密钥一个独特的名字。
这听起来好像您的设备在复制过程中不是function正常,或者电脑没有获得足够的电量。
它连接了什么USB端口? 如果你有一个外部供电的USB集线器,使用它。
否则,请尽可能靠近主板 – 某些电脑的前端/顶端端口或扩展插槽上额外的USB端口可用的电源较less。
我已经看到廉价的USB设备在大规模复制过程中会做各种各样的愚蠢的事情。
(在我工作的地方,我们有我们的软件的USB评估版本,我用一根4Gb棒来制作它们。)我去年可能已经处理了几十个棒子。
我很确定我已经看到USB棒上的状态机在廉价机型的大量使用中被卡住了。 再次,Ubuntu,但8.04LTS。
再次,回应以前的海报,尝试一个不同的端口; 我发现在使用笔记本电脑的电源扩展坞上使用的USB端口有帮助。
大宗build议是坚持品牌驱动。
如果您不想使用UUID或磁盘标签,则总是有/dev/disk/by-
foo /*
设备名称。 在那里,您还可以通过make-model-serial或通过I / O端口来select磁盘。
您可以给该卷一个标签,然后通过标签挂载,例如
mount -L /myusbstick /mnt/myusbstick
然后它可以插入任何端口或任何设备名称,它会被发现。 你也可以使用uuids,但不是那么方便。
您可以通过USB设备的表面扫描来查找坏扇区。 系统日志中的input/输出错误消息可能意味着坏扇区的存在。 我用seagate的seatools进行固定的IDE / SATA驱动器表面扫描。 看看它是否能识别你的USB驱动器。