AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 34895
Accepted
jobu1324
jobu1324
Asked: 2009-07-03 00:19:40 +0800 CST2009-07-03 00:19:40 +0800 CST 2009-07-03 00:19:40 +0800 CST

复制时 USB 驱动器将名称从 /dev/sdb 更改为 /dev/sdc (然后再返回)?

  • 772

我在 Ubuntu 9.04 服务器安装中的文件夹中安装了一个 USB 驱动器。挂载选项存储在 /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 后,行为没有任何差异。此外,我曾经能够列出 tarball 的文件内容,但现在尝试这样做会导致上述行为。有任何想法吗?

更新:

运行备份脚本并将备份存储在 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

我发现了一些似乎相关的东西,但按照说明进行操作并没有成功:FreeAgent Drives

linux ubuntu usb drive
  • 7 7 个回答
  • 17793 Views

7 个回答

  • Voted
  1. David Pashley
    2009-07-03T00:26:30+08:002009-07-03T00:26:30+08:00

    你想调查udev。这负责在 /dev 下命名设备节点,您可以设置规则为您的 USB 密钥提供唯一名称。

    • 5
  2. Best Answer
    Juliano
    2009-07-05T09:11:06+08:002009-07-05T09:11:06+08:00

    您的配置似乎有很多问题。

    1. 将 USB 驱动器放入 fstab 是没有意义的。Fstab 是系统存储设备及其挂载点的大部分静态列表。您将静态驱动器/分区标识(基于控制器/设备地址)分配给静态安装点。对于 USB 驱动器来说,这些都不是静态的。在您的第一个示例中,如果您在系统中安装第二个硬盘,您会遇到问题:它会变成 /dev/sdb,将您当前的 USB 驱动器移动到 /dev/sdc,从而在启动时破坏您的配置。

    2. 此外,将驱动器置于 fstab 并带有“auto”选项会告诉系统该驱动器将在引导时安装。如果由于某种原因驱动器在启动时断开连接,您的服务器将在启动过程中出现故障,这是一个非常不受欢迎的情况。如果驱动器不是系统运行所必需的,它至少不应该有“自动”选项。

    3. “nouser”选项是不必要的,它是默认的。除非您真的知道自己在做什么,否则“同步”选项是一个非常糟糕的主意。它不仅会严重影响性能,还会导致驱动器的额外磨损,特别是闪存介质。

    4. fs_passno = 3(fstab 的第六列)导致未定义的行为。有效值仅为 0、1 或 2。

    5. 将 NTFS 与用于备份 Linux 服务器的驱动器一起使用。你为什么这样做?所有 Linux NTFS 实现都不是最理想的,不足以运行任何 Linux 子系统。您应该使用原生 Linux 文件系统,例如 Ext3。

    从您的内核日志中,我可以预测其中一项或多项可能是有效的:

    1. 您有一个分区错误的磁盘,即文件系统使用错误的参数格式化,比实际分区大;或者分区表中的分区(逻辑大小)大于驱动器的物理大小。这来自您看到的“缓冲区 I/O 错误”。您应该考虑完全重置此磁盘,包括分区表,并从头开始重新分区和重新格式化。

    2. 您的磁盘中有一个坏扇区(“end_request:I/O 错误”)。您应该考虑badblocks在磁盘上运行来检查。

    3. 您的 USB 外壳无法正常工作(来自“usb 重置”)。如果是外置硬盘,则应使用独立电源。USB 端口(有时)提供的 5V 500mA 不足以保持硬盘驱动器的机制运行。它也可能过热,特别是便宜的 USB 闪存驱动器。

    4. NTFS 文件系统已损坏。使用 修复它可能是可能的ntfsfix,但您应该再次记住,NTFS 不是本机 Linux 文件系统。为获得最佳效果,您需要一个 Windows 系统来正确检查此分区(使用 Scandisk)。

    其他建议包括:停止使用 NTFS 并选择本机 Linux 文件系统,从 fstab 中删除该条目,手动挂载磁盘作为备份脚本的一部分,完成后卸载它并使用 UUID 或文件系统标签来引用磁盘。

    • 5
  3. Teddy
    2009-07-05T00:05:22+08:002009-07-05T00:05:22+08:00

    如果您不想使用 UUID 或磁盘标签,则总是有/dev/disk/by-foo/*设备名称。在那里,您还可以通过 make-model-serial 或 i/o 端口选择磁盘。

    • 4
  4. Tzafrir
    2009-07-03T06:53:59+08:002009-07-03T06:53:59+08:00

    在我看来,您的设备要么在复制过程中出现故障,要么没有从计算机获得足够的电量。

    它连接到哪个 USB 端口?如果您有外部供电的 USB 集线器,请使用它。

    否则,请尽可能靠近主板 - 某些计算机在前/顶部端口或扩展插槽的额外 USB 端口处可用的电源较少。

    • 3
  5. Tim Williscroft
    2009-07-03T14:27:28+08:002009-07-03T14:27:28+08:00

    我见过廉价的 USB 设备在大量复制过程中会做各种愚蠢的事情。

    (在我工作的地方,我们的软件有一个 USB 评估版,我添加了一个 4Gb 的记忆棒来生产它们。)去年我可能已经处理了几十个记忆棒。

    我很确定我已经看到 USB 记忆棒上的状态机在廉价型号的大量使用下被卡住了。同样,Ubuntu,但 8.04LTS。

    再次呼应之前的海报,尝试不同的端口;我在我正在使用的笔记本电脑的供电坞站上找到了一个正在使用的 USB 端口。

    大量建议是坚持使用名牌驱动器。

    • 3
  6. MarkR
    2009-07-03T14:02:22+08:002009-07-03T14:02:22+08:00

    您可以给卷一个标签,然后按标签安装它,例如

    mount -L /myusbstick /mnt/myusbstick
    

    然后它可以插入任何端口或任何设备名称,它会被找到。您也可以使用 uuid,但它们不太方便。

    • 1
  7. Saurabh Barjatiya
    2009-07-04T21:09:36+08:002009-07-04T21:09:36+08:00

    您可以运行 USB 设备的表面扫描并查找坏扇区。syslog 中的输入/输出错误消息可能意味着存在坏扇区。我使用希捷的 seatools 进行固定 IDE/SATA 驱动器表面扫描。看看它是否可以识别您的 USB 驱动器。

    • 0

相关问题

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve