Имена жестких дисков в Linux?

1080
Billylegota

Пытается ли Linux каждый раз указывать одну и ту же букву?
Например, если подключить два диска к моему компьютеру, отключите их и подключите их в обратном порядке, будут ли sdb и sdc соответствовать одним и тем же физическим дискам?

Это то, что я хочу:

First:  Plug in HDD A, which becomes sdb. Plug in HDD B, which becomes sdc.   Then: Plug in HDD B, which becomes sdc. Plug in HDD A, which becomes sdb. 

Вопрос в том, делает ли Linux это автоматически? Если нет, то как бы я сделал что-то подобное? (Я хочу иметь три диска, которые можно инициализировать в любом порядке, но при этом они должны быть смонтированы в одной точке).

5

1 ответ на вопрос

12
grawity

No, the sd* names are assigned sequentially, based on which disk was detected first.

If you need a persistent name, udev already provides them based on several properties such as filesystem labels / UUIDs; partition labels / UUIDs (GPT only); disk attachment paths; SCSI WWNs; and so on.

Take a look at /dev/disk:

┌ rain ~ ┘ tree /dev/disk/ /dev/disk/ ├── by-id (hardware-based ID) │   ├── ata-SlimtypeDVD_A_DS8A5SH_012160166091 -> ../../sr0 │   ├── ata-ST9640320AS_5WX1ZH91 -> ../../sda │   ├── ata-ST9640320AS_5WX1ZH91-part7 -> ../../sda7 │   ├── mmc-SD4GB_0x0054b5cf -> ../../mmcblk0 │   ├── mmc-SD4GB_0x0054b5cf-part1 -> ../../mmcblk0p1 │   ├── wwn-0x5000c5002f0e9ce1 -> ../../sda │   ├── wwn-0x5000c5002f0e9ce1-part1 -> ../../sda1 │ └── … ├── by-label (name encoded in filesystem header) │   ├── keycard -> ../../mmcblk0p1 │   ├── raindows -> ../../sda6 │   ├── rainhome -> ../../sda5 │ └── … ├── by-partlabel (name encoded in GPT partition table) │   ├── Arch -> ../../sda4 │   ├── EFI -> ../../sda1 │   ├── home -> ../../sda5 │   ├── swap -> ../../sda8 │ └── … ├── by-partuuid (UUID encoded in GPT partition table) │   ├── 14420948-2cea-4de7-b042-40f67c618660 -> ../../sda4 │   ├── 1c737f60-8667-4d1a-9c92-5f5caf69be60 -> ../../sda3 │   ├── 267bbb83-0bb5-48b8-aa4c-ffe328328f5b -> ../../sda5 │ └── … └── by-uuid (UUID encoded in filesystem header) ├── 0C5C17E25C17C57C -> ../../sda7 ├── 413b42fe-77f7-41d0-8d40-a7578f70995d -> ../../sda4 ├── 4b30e8db-563e-4947-8d41-f242d94a6d3a -> ../../mmcblk0p1 ├── 8594cc4c-9c42-436a-8723-9a0611b1f97d -> ../../sda5 └── … 

You can use them as such:

/dev/disk/by-label/arch_boot /boot ext4 rw,auto 0 1 

In fstab, an alternative syntax also works for label and uuid fields:

LABEL=arch_boot /boot ext4 rw,auto 0 1 

Note: In some older Linux distributions, various udev rules attempt to make the sd* names persistent. But it cannot work reliably; often the "rename" fails because another disk got assigned the desired name. This function was removed in later udev versions. Do not rely on sd* names being persistent, even if they seem to be.

Все мои постоянные диски монтируются с помощью UUID или через LVM (который использует UUID PV внизу). Это включает в себя / boot. В конце концов, что произойдет, если вы подключите другой жесткий диск из другой системы Linux (что вы вполне можете сделать в какой-то момент)? В любом случае вы никогда не должны полагаться на согласованность имен `sd *`. Michael Hampton 9 лет назад 0
Так что я мог бы просто использовать сценарий оболочки, чтобы посмотреть UUID жесткого диска и смонтировать его в определенную точку, основываясь на его UUID, верно? Пример: если uuid == xxxxxxxxxx, то смонтировать / dev / sdb / что угодно / my / mount / point / is Billylegota 9 лет назад 0
@Billylegota: А? Нет. Вы можете использовать UUID непосредственно в / etc / fstab. Я даже дал два примера именно для этого. Для чего вам нужен сценарий оболочки? grawity 9 лет назад 0
@ Grawity: Извините, не видел эту часть. Просто увидел дерево / dev / disk и сказал "похоже на работу для bash"; D Billylegota 9 лет назад 0
Есть ли способ последовательно получить диск вместо раздела? / dev / sda вместо / dev / sda1? sep332 8 лет назад 0
@ sep332: для обоих есть имена by-id и by-path. (С некоторыми корректировками правил udev также могут быть имена из-за дискурса.) grawity 8 лет назад 0

Похожие вопросы