Чи можна мітити дисковий пристрій, а не розділ?


24

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

e2label /dev/sda1 bla

Я хочу зробити щось інше: я хочу створити мітку для жорсткого диска, тобто для / dev / sda, а не для розділу.

Це можливо і якщо так, то як?

EDIT: Передумови: У випадку з декількома відсіками HD я хотів би поставити (паперові) мітки на двері фізичного відсіку і поставити ту саму мітку логічно на диск, який я вклав туди.

EDIT2: Йдеться про сервер Ubuntu Linux 12.04.

EDIT3: На розділах GPT також є мітка partlabel, яку можна встановити, наприклад, розділивши. Дивіться /server//q/681088/76442


1
Це велике запитання, оскільки ви один із найкращих, хто правильно зрозумів цю концепцію. Основна мета міток - однозначно ідентифікувати розділ, навіть коли диски перераховані по-різному після наступної перезавантаження. Але хоча диски можуть бути перепорядковані, розділи залишаються виправленими на своєму диску. Тому було б правильніше давати дискам UUID / label, а не розділи. Це означатиме, що розділи будуть іменами 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'

(збігається для 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посилаєтесь на диск А. З вашого запитання я вважаю, що це ваш намір. Будь ласка, виправте мене, якщо я помиляюся.


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, але розумійте, що ця настройка залежить від системи, тому якщо ви перенесли цей HDD в іншу систему, "маркування", яке він запропонував, буде втрачено. Він не прив’язаний до диска жодним змістовно.

До речі, за допомогою blkidкоманди можна побачити мітки та набір UUID для різних дисків .

Приклад

$ 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" 

Хороший момент про те, що налаштування залежить від системи. З питання, я думаю, що ОП знає про це: вони хочуть мітити на жорсткі диски, а не на фактичні жорсткі диски всередині них. Я додаю це як замітку до своєї відповіді про всяк випадок.
Джозеф Р.

@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.