Я знаю о программе e2label и ее друзьях для прикрепления метки к разделу диска, например
e2label /dev/sda1 bla
Я хочу сделать нечто другое: я хочу создать метку для жесткого диска, то есть для /dev/sda, а не для раздела.
Возможно ли это и если да, то как?
EDIT: Предыстория: В случае с несколькими отсеками для жестких дисков я хотел бы поместить (бумажные) этикетки на дверцу физического отсека и логически поместить ту же этикетку на диск, который я туда вставил.
EDIT2: Речь идет о сервере Ubuntu Linux 12.04.
EDIT3: На разделах GPT также есть partlabel, который можно задать, например, с помощью parted. Смотритеhttps://serverfault.com/q/681088/76442
решение1
На ваш первоначальный вопрос уже есть несколько хороших ответов, поэтому я сосредоточусь на предыстории вашего вопроса — маркировке дисков.
Я использую серийный номер диска для печати этикеток для отсеков горячей замены — это лучший способ уникальной и единообразной идентификации диска. Он не изменится независимо от того, в какой отсек или к какому контроллеру он подключен.
Вы не указали, используете ли вы Linux или какой-то другой Unix, но в Linux вы можете получить список дисков (и разделов, которые мы хотим исключить) с их маркой, моделью и серийным номером, заглянув в каталог /dev/disk/by-id/. Я считаю, что следующий псевдоним bash полезен для этого:
alias list_disks='find /dev/disk/by-id/ -iname 'scsi-*' | grep -v -- -part | while read disk ; do echo $(readlink $disk | sed -e s:../../:: ) $(basename $disk); done'
(сопоставление scsi-*
находит все диски типа «scsi», включая диски SATA и SAS. в системах, где есть только диски SATA, ata-*
это также сработает)
например, на одной из моих серверных систем ZFS он выдает такой вывод:
# список_дисков | сортировка sdb scsi-SATA_WDC_WD10EACS-00Z_WD-WCASJ2195141 sdc scsi-SATA_WDC_WD10EACS-00Z_WD-WCASJ2114122 sdd scsi-SATA_ST31000528AS_9VP4P4LN sde scsi-SATA_ST31000528AS_6VP3FWAG sdf scsi-SATA_ST31000528AS_9VP509T5 sdg scsi-SATA_ST31000528AS_9VP4RPXK sdh scsi-SATA_OCZ-VECTOR_OCZ-0974C023I4P2G1B8 sdi scsi-SATA_OCZ-VECTOR_OCZ-8RL5XW08536INH7R sdj scsi-SATA_ST31000528AS_9VP18CCV SDK scsi-SATA_WDC_WD10EARS-00Y_WD-WMAV50933036
Как вы видите, список /dev/disk/by-id включает в себя марку и номер модели каждого диска, а также серийный номер. Все они являются дисками SATA, подключенными либо к портам SATA, либо к портам SAS на контроллере LSI SAS-2008.
Если бы у меня был подключен принтер этикеток, было бы достаточно просто печатать этикетки на основе выходных данных list_disks
. Я использовал старый ручной принтер этикеток, потому что он у меня был. Напечатанные этикетки содержат только серийный номер без марки/модели (этого мне достаточно, чтобы идентифицировать диск, когда это нужно). Этикетки очень удобны, когда диск выходит из строя и его нужно заменить.
решение2
Если мы говорим о Linux, то я думаю, что вы можете добиться того, чего хотите, используя udev
создание символической ссылки на ваши устройства. Если вы посмотрите на /etc/udev/rules.d
, там есть файл с именем, 70-persistent-cd.rules
содержимое которого содержит строки вроде:
SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.2-scsi-:0:0:0", SYMLINK+="cdrom", ENV{GENERATED}="1"
Это делает то, что создает символическую ссылку /dev/cdrom
на устройство, идентифицированное по его адресу шины PCI. Вы должны быть в состоянии достичь того, что вы хотите, идентифицируя жесткий диск, используя его (номер отсека? извините, у меня нет опыта) и используя аналогичный синтаксис, чтобы добавить символическую ссылку /dev/bay1
, например, как . Следующая статья о udev
правилах написания может быть полезна:
Примечание
Благодаря ответу slm, обратите внимание, что это решение делает метки специфичными для отсеков HDD, а не для дисков внутри них. Таким образом, если вы используете метки /dev/bay1
и /dev/bay2
и у вас есть жесткий диск A в отсеке 1 и жесткий диск B в отсеке 2, то /dev/bay1
относится к диску A и /dev/bay2
относится к диску B. Если по какой-то причине вы меняете местами диски A и B, вы получаете /dev/bay1
относится к диску B и /dev/bay2
относится к диску A. Из вашего вопроса я полагаю, что это ваше намерение. Пожалуйста, поправьте меня, если я не прав.
решение3
Вы не e2label разделы, вы e2label файловые системы. Эти файловые системы могут быть на разделах файлов, на целых дисках, на сетевых блочных устройствах... это не имеет значения.
Итак, да, если непосредственно на имеется файловая система ext2/3/4 /dev/sda
, вы можете пометить ее точно так же, как и ту, которая находится на /dev/sda1
.
Теперь, если на диске нет файловой системы, /dev/sda
но он, например, /dev/sda
разбит (с помощью GPT, MBR, LVM...) на несколько разделов, то, очевидно, вы не можете использовать e2label /dev/sda
.
В разбиении GPT вы можете давать имена разделам, так что вы можете создать раздел размером в один сектор с именем, которое поможет идентифицировать ваш диск. Вы можете сделать это с помощью команды c
в gdisk
.
решение4
Отвечая на ваш вопрос, можно ли маркировать диск, а не раздел, ответ — нет. Я не знаю ни одного способа сделать это.
Вы можете использовать метод, описанный @JosephR, но поймите, что эта настройка зависит от системы, поэтому если вы перенесете этот жесткий диск в другую систему, предложенная им "маркировка" будет потеряна. Она не привязана к диску каким-либо значимым образом.
Кстати, вы можете просмотреть метки и UUID, установленные для разных дисков, с помощью blkid
команды.
Пример
$ blkid
/dev/sda1: LABEL="SYSTEM_DRV" UUID="XXXXXX" TYPE="ntfs"
/dev/sda2: LABEL="Windows7_OS" UUID="XXXXXX" TYPE="ntfs"
/dev/sda3: LABEL="Lenovo_Recovery" UUID="XXXX" TYPE="ntfs"
/dev/sda5: UUID="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" TYPE="ext4"
/dev/sda6: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXfG93LA" TYPE="LVM2_member"
/dev/mapper/vg_grinchy-lv_root: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXX" TYPE="ext4"
/dev/mapper/vg_grinchy-lv_swap: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXX" TYPE="swap"
/dev/mapper/vg_grinchy-lv_home: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXX" TYPE="ext4"