Nic*_*629 4 linux sata usb-drive
我有一个 S2 SAMSUNG 320GB USB-HDD,我在 Ubuntu 13.10(内核 3.11.0-17-generic)和 Fedora 17 中使用它。
它工作正常;我可以从/向他们读/写。虽然,我遇到了处理笔式驱动器和其他 USB 设备的软件的问题。该程序尝试通过运行以下命令来列出可用设备:
ls -l /dev/disk/by-id/usb*
Run Code Online (Sandbox Code Playgroud)
并且什么都不返回。
所以,我在终端运行:ls -l /dev/disk/by-id/*
并得到了这个:
ata-hp_DVDRAM_GT30L_KZEA6810820
ata-SAMSUNG_HM321HX_C5733G82AB0BPW
ata-WDC_WD3200BEKT-60V5T1_WD-WX81A50J4370
wwn-0x50000f00ab0b000b
wwn-0x50014ee20495cc9f
Run Code Online (Sandbox Code Playgroud)
在/dev/disk/by-uuid
,我的 UBS-HDD 是:19ED-1878 ->../../sdb
因此,我的外置 HD 被列为“ata-SAMSUNG....”,但找不到“usb*...”。
我在谷歌上搜索了很多。研究发现,编辑/etc/fstab
或/boot/grub/grub.conf
将帮助我(没有找到与我的USB开发任何东西grub.conf
,也没有fstab
)。或者像 ZFS、zpool 之类的东西,甚至是一个(仅?)处理 UUID 的工具,tune2fs。
那么,是否可以更改/dev/disk/by-id/ata-SAMSUNG...
为../../by-id/usb-SAMSUNG...
?如果是这样,如何?
好的,我猜这是一个udev
问题(大多数 Linux 发行版默认使用它),这就是创建符号链接的原因。您可以通过添加新规则来解决此问题。我将提供一些关于此的信息,但它主要基于我自己的发行版 - Debian。
首先,你需要找到你的规则在哪里。Debian 将它们放在两个位置 -/lib/udev/rules.d
和/etc/udev/rules.d
. 如果是这种情况,您应该只添加/更改下面的那些,/etc
因为更改另一个位置更有可能导致被更新覆盖。
转到规则目录,看看您是否可以找到包含创建链接规则的文件disk/by-id
。该命令grep -r disk/by-id/
将在这里提供帮助(尽管只在规则目录中运行它以避免搜索其他地方)。对我来说,文件是/var/lib/rules.d/60-persistent-storage.rules
. 以下是为我创建``disk/by-id/usb-*` 链接的行:
ENV{DEVTYPE}=="disk", ENV{ID_BUS}=="?*", ENV{ID_SERIAL}=="?*", \
SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
ENV{DEVTYPE}=="partition", ENV{ID_BUS}=="?*", ENV{ID_SERIAL}=="?*", \
SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}-part%n"
Run Code Online (Sandbox Code Playgroud)
这里有两种可能性(除了您的系统根本不使用的一种udev
):
这些行可能看起来像胡言乱语,但基本上前两条(实际上是一条,因为这\
只是拆分长行的一种方式)用于与磁盘本身相关的链接,另外两条用于其分区。
希望运行此命令可以让事情变得不那么混乱:
udevadm info --name=/dev/sdb --query=property
Run Code Online (Sandbox Code Playgroud)
这会显示您设备的所有属性的名称/值。基本上所有规则所做的就是遍历每个设备的所有属性,并将它们与行的第一部分进行匹配(例如,首先查找带有DEVTYPE=disk
、非空ID_BUS
和 的设备ID_SERIAL
)。下一部分创建一个符号链接,其名称包含ID_BUS
和ID_SERIAL
。
无论如何,这归结为如果您有ID_BUS=usb
,您可以继续添加上述规则。如果没有,您可能需要为您的设备添加特定规则。就像是:
ENV{ID_SERIAL}=="SAMSUNG_HM321HX_C5733G82AB0BPW", \
SYMLINK+="disk/by-id/usb-$env{ID_SERIAL}"
ENV{ID_SERIAL}=="SAMSUNG_HM321HX_C5733G82AB0BPW", \
SYMLINK+="disk/by-id/usb-$env{ID_SERIAL}-part%n"
Run Code Online (Sandbox Code Playgroud)
我已经ID_SERIAL
从问题中猜到了你的问题,如果它错了,请输入正确的。
规则可能最好放在它们自己的文件中,例如s2-samsung-usb.rules
在您开始时找到的目录中。
更新:以下可能不是必需的,只需拔下并再次插入设备 -如何在不重启的情况下重新加载 udev 规则?
完成后,您可以重新加载规则(先拔掉设备):
udevadm control --reload-rules
Run Code Online (Sandbox Code Playgroud)
然后再次插入您的设备。如果这不起作用,您可以随时尝试重新启动(实际上这可能更安全)。