На прошлой неделе у меня был скрипт, который ожидал, что мой usb будет sdc, я использовал эту команду
usb_path=`lsblk | grep sdc1 | awk '{print $7}'`
но потом я вернулся и увидел, что флешка пуста, потому что она была названа sdb. Так что же зависит от того, какое имя получает флешка? У меня не было другого диска, когда она получила sdc, и никакого другого диска не подключено сейчас, когда она sdb. Так что единственное различие, которое я мог увидеть, это время, но это кажется глупым. О, и это та же самая флешка usb, что и на прошлой неделе.
решение1
Буква b
/ c
в sdb
/ sdc
— это счётчик.
Первый обнаруженный диск получает sda
, второй sdb
— и так далее.
Буквы могут быть пропущены, если, например, вы временно теряете соединение при подключении USB-накопителя. Сначала USB-накопитель получает sdb
, затем соединение разрывается и восстанавливается, и он получает sdc
, потому что sdb
еще не был освобожден.
Поскольку нельзя рассчитывать на то, что одно и то же устройство будет каждый раз получать одно и то же имя, в Ubuntu есть каталог с символическими ссылками на диски, которые привязаны к идентификатору файловой системы на диске:
/dev/disk/by-uuid/
Каждый раздел на каждом подключенном диске получает запись в этом каталоге, и она всегда остается одинаковой для одного и того же раздела.
Если вы хотите получить доступ к USB-накопителю, подключенному к определенному USB-порту, а не просто использовать идентификатор USB-накопителя, вы можете воспользоваться записями в /dev/disk/by-path
.
lsblk
принимает аргумент, если вам нужна информация о конкретном устройстве. Поэтому вместо использования lsblk | grep …
вы можете использовать eg lsblk /dev/disk/by-id/1234-5678
илиlsblk /dev/disk/by-path/pci-0000:00:2.0-usb-0:1:1.0-scsi-0:0:0:0