Могу ли я обозначить дисковое устройство, а не раздел?


24

Я знаю о программе e2label and friends для прикрепления метки к разделу диска, например

e2label /dev/sda1 bla

Я хочу сделать что-то другое: я хочу создать ярлык для жесткого диска, то есть для / dev / sda, а не для раздела.

Это возможно и если да, то как?

РЕДАКТИРОВАТЬ: Справочная информация: В случае с несколькими отсеками HD, я хотел бы поместить (бумажные) метки на дверь физического отсека и логически поставить ту же самую метку на диск, который я там вставил.

РЕДАКТИРОВАТЬ 2: Это о сервере Ubuntu Linux 12.04.

EDIT3: В разделах GPT также есть разделительная метка, которую можно установить, например, с помощью parted. См. Https://serverfault.com/q/681088/76442.


1
Это отличный вопрос, так как вы один из лучших, кто правильно понял концепцию. Основная цель меток - уникально идентифицировать раздел, даже если после следующей перезагрузки диски нумеруются по-разному. Но в то время как диски могут быть переупорядочены, разделы остаются неподвижными на их диске. Поэтому было бы правильнее дать дискам UUID / метку, а не разделы. Это будет означать, что разделы будут именоваться как UUID / 1, UUID / 2 и так далее. В добавлении метки к разделу нет ничего плохого, но по умолчанию следует использовать UUID для каждого диска, а не для каждого раздела.
Патрик Хэкер

Спасибо, но я сомневаюсь, что я действительно один из первых. Эта проблема раздражала меня уже давно.
dummzeuch

1
Если вы форматируете свой диск как таблицу разделов GUID (GPT) вместо MSDOS или unix (используя gnu parted). Ваш диск будет иметь UUID, разделы будут иметь UUID, а диск ext2 / 3/4 может иметь свой UUID. Обычно я могу найти диски, используя / dev / disk / by-uuid, а разделы - / dev / disk / by-partuuid
Rahly

Ответы:


9

На ваш первоначальный вопрос уже есть несколько хороших ответов, поэтому я сосредоточусь на фоне вашего вопроса, маркировке дисков.

Я использую серийный номер привода для печати этикеток для отсеков горячей замены - это лучший способ однозначно и последовательно идентифицировать диск. Он не изменится независимо от того, к какому отсеку или к какому контроллеру он подключен.

Вы не упоминаете, используете ли вы 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'

(Соответствие for scsi-*находит все "scsi-подобные" диски, включая диски SATA и SAS. В системах с только дисками SATA также ata-*будет работать)

например, на одной из моих систем ZFS-сервера он выдает такие данные:

# list_disks | Сортировать
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. Вместо этого я использовал старый ручной писатель этикеток, потому что это то, что у меня было. На напечатанных этикетках указан только серийный номер без марки / модели (этого достаточно для идентификации диска, когда мне это необходимо). Этикетки очень удобны, когда привод выходит из строя и требует замены.


Я думаю, что это лучшее решение моей настоящей проблемы, но я не могу принять это как ответ, потому что он не отвечает на вопрос. Если я не изменю вопрос, который, вероятно, не очень хорошая идея. Спасибо.
dummzeuch

нет проблем, как вы сказали, он не ответил прямо на вопрос. но это было полезно, и, надеюсь, кто-то еще найдет это полезным в будущем. Кстати, вот улучшенная версия псевдонима: alias list_disks='find /dev/disk/by-id/ -iname scsi-* -o -iname usb-* | grep -v -- -part | while read disk ; do echo $(basename $(readlink $disk)) $(basename $disk); done | sed -re "s/(usb|scsi)-// ; s/(SATA|Generic)_//" | sort'. он также находит USB-диски и избавляется от посторонних данных в выводе.
Cas

7

Если речь идет о 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правил может быть полезна:

Написание правил Udev

Заметка

Благодаря ответу slm, обратите внимание, что это решение делает метки специфичными для отсеков для жестких дисков, а не для дисков внутри них. Таким образом, если вы используете метки /dev/bay1и у /dev/bay2вас есть жесткий диск A в отсеке 1 и жесткий диск B в отсеке 2, то это /dev/bay1относится к диску A и /dev/bay2относится к диску B. Если по какой-то причине вы меняете местами диски A и B, вы получаете /dev/bay1ссылку на диск B и /dev/bay2ссылку на диск A. На ваш вопрос я полагаю, что это ваше намерение. Пожалуйста, поправьте меня, если я ошибаюсь.


1
Я бы рекомендовал использовать номер модели и серийный номер для такого соответствия. Это все еще идет с предостережениями, упомянутыми slm, но гарантирует, что «метка» диска остается неизменной независимо от того, что происходит с ним или любыми другими дисками в системе.
CVN

Еще лучше отдать предпочтение уникально гарантированному WWN. Смотрите этот ответ .
Том Хейл,

6

Вы не e2label разделы, вы e2label файловых систем. Эти файловые системы могут быть на разделах в файлах, на целых дисках, на сетевых блочных устройствах ... это не имеет значения.

Так что да, если непосредственно включена файловая система ext2 / 3/4 /dev/sda, вы можете пометить ее так же, как и ту, которая была бы включена /dev/sda1.

Теперь, если непосредственно нет файловой системы, /dev/sdaно, например, /dev/sdaона разделена (с использованием GPT, MBR, LVM ...) на несколько разделов, то, очевидно, вы не сможете ее использовать e2label /dev/sda.

В разделе GPT вы можете присваивать имена разделам, чтобы вы могли создать раздел с одним сектором, имя которого поможет идентифицировать ваш диск. Вы можете сделать это с помощью cкоманды gdisk.


3

Чтобы ответить на ваш вопрос, если можно пометить диск, а не раздел, ответ - нет. Я не знаю ни одного способа сделать это.

Вы можете использовать метод, описанный @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" 

Хороший вопрос о том, что установка зависит от системы. Исходя из этого, я думаю, что OP знает об этом: они хотят маркировать отсеки для жестких дисков, а не сами жесткие диски внутри них. Я добавляю это как примечание к своему ответу на всякий случай.
Джозеф Р.

@Marco Но, blkidпохоже, перечисляет только разделы, а не устройства, а это не то, что интересует ОП.
Джозеф Р.

Нет, я действительно хотел маркировать диски, а не отсеки. Но я рассмотрю этот вариант.
dummzeuch

Это является возможность пометить диск, сам Linux делает это , /dev/disk/by-idи вы можете сделать это udev-Style , как показано в этом ответе .
Том Хейл,

@ TomHale - ты упустил мою точку зрения. Эта метка не применяется к самому жесткому диску, а поддерживается в самой системе Linux. Если вы удалите этот жесткий диск из системы, метка больше не будет доступна в других системах, к которым будет подключен жесткий диск. Это зависит от системы, поэтому мой совет правильный. Пожалуйста, переверните ваш DV.
SLM

3

Я предполагаю, что ваша главная цель - однозначно идентифицировать физический диск. К сожалению, я не верю, что существует стандартный способ маркировки диска так же, как вы можете маркировать файловую систему.

Одним из способов является использование модели диска и серийного номера. В Linux вы можете получить эти идентификаторы с помощью hdparm -i /dev/sdX. Приятно то, что серийный номер может быть напечатан на наклейке производителя. (Я предполагаю, что вы в основном заботитесь о Linux, поскольку вы упомянули e2labelв своем вопросе. Если это так, пожалуйста, отредактируйте ваш вопрос и добавьте тег .)

Если вы используете аппаратный RAID-контроллер, он hdparmможет не сработать, и в этом случае вам придется обратиться к инструментам командной строки RAID-контроллера.

Если вы хотите идентифицировать его по содержимому диска, вы можете использовать GUID диска, который хранится в заголовке таблицы разделов GPT ( байты 56-71 LBA 1 ). Это произвольная случайная строка, а не метка по вашему выбору, но она похожа на метку в том смысле, что она постоянна до тех пор, пока вы не решите засорять таблицу разделов. В Linux вы можете увидеть GUID диска, используя gdisk -l /dev/sdX.


1

Судя по ответам, которые я получил (спасибо, ребята!), Похоже, нет способа на самом деле пометить диски, а только разделы. Таким образом, ответ, вероятно, "НЕТ".

Я пойду с предложениями, предложенными @cas и @ 200_success: я приклею серийные номера дисков с наклейкой к дверям отсека.

Создание небольшого раздела на каждом диске просто для того, чтобы иметь возможность пометить этот раздел (как предложено @Stephane Chazelas), также является вариантом, но я думаю, что это будет слишком запутанным для кого-то другого, кому, возможно, придется обслуживать систему позднее. ,


1

Создайте udevправило, используя гарантированный уникальный WWN диска (если он есть), в противном случае используйте комбинированный идентификатор поставщика и серийный номер:

  1. Получите необходимые значения:

    udevadm info -q all /dev/<YOUR-DEVICE-HERE> | egrep "(WWN|SERIAL|VENDOR_ID)="
    
  2. Помассируйте эти значения, udev rulesтакие как:

    ENV{DEVTYPE}=="disk", ENV{ID_WWN}=="0x5000c1cd31d48c87", SYMLINK+="4TBseagate"
    
    ENV{DEVTYPE}=="disk", ENV{ID_VENDOR_ID}=="0781", ENV{ID_SERIAL}=="SanDisk_Cruzer_Blade_4C530263101009    121490-0:0", SYMLINK+="8GBsandisk"
    
  3. udevadm trigger

Чтобы автоматически называть символическую ссылку, используя значения, данные udevadm info -q all /dev/<YOUR-DEVICE>, вы можете использовать:

SYMLINK+="disk-$env{ID_VENDOR}-$env{ID_SERIAL_SHORT}"

Также возможно создавать ENVпеременные из ATTRSзначений, чтобы получить более короткий уникальный идентификатор.


0

Если ты ls /dev/disk-by-path/pci*...

Вы обязательно увидите путь PCI для каждого отсека для дисков. Вам просто нужно использовать 1 известный диск, чтобы убедиться, что вы правильно выбрали метки.

Используйте, blkid /dev/disk-by-path/pci*чтобы увидеть, какие разделы диска находятся на пути PCI.

Вы также можете монтировать по этому пути.


0

Мне нравится решение @cas, но вот мои 2 ¢

for i in /dev/sd?
do
  echo "$i"
  /usr/sbin/smartctl -a "$i" | grep Serial
  /usr/sbin/smartctl -a "$i" | grep "Device Model"
  echo
done

-1

Диск уже помечен как sda, sdb, sdc... Перегородки пометили затем, например , на sda: sda1, sda2...

Вы можете перечислить все метки для дисков и разделов с помощью ls /dev/sd*


4
К сожалению, имена этих устройств меняются, если я перемещаю диск с одного компьютера на другой или с одного контроллера на другой.
dummzeuch
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.