Czy mogę oznaczyć urządzenie dyskowe zamiast partycji?

24

Wiem o programie e2label i znajomych do dołączania etykiety do partycji dysku np

e2label /dev/sda1 bla

Chcę zrobić coś innego: chcę utworzyć etykietę dla dysku twardego, czyli dla / dev / sda, a nie dla partycji.

Czy to możliwe, a jeśli tak, to w jaki sposób?

EDYCJA: Tło: W przypadku wielu kieszeni HD chciałbym umieścić (papierowe) etykiety na drzwiach wnęki fizycznej i logicznie umieścić tę samą etykietę na dysku, który tam włożyłem.

EDIT2: Chodzi o serwer Ubuntu Linux 12.04.

EDYCJA 3: Na partycjach GPT jest także partlabel, który można ustawić np. Za pomocą parted. Zobacz /server//q/681088/76442

dummzeuch
źródło
1
To świetne pytanie, ponieważ jesteś jednym z najlepszych, którzy dobrze zrozumieli tę koncepcję. Głównym celem etykiet jest unikatowa identyfikacja partycji, nawet jeśli dyski są wyliczane inaczej po następnym ponownym uruchomieniu. Ale chociaż dyski mogą zostać ponownie uporządkowane, partycje pozostają na swoim dysku. Bardziej właściwe byłoby nadanie dyskom identyfikatora UUID / etykiety, a nie partycji. Oznaczałoby to, że partycje będą miały nazwy UUID / 1, UUID / 2 i tak dalej. Nie ma nic złego w dodawaniu etykiety do partycji, ale domyślnym przypadkiem powinno być użycie UUID na dysk, a nie na partycję.
Patrick Häcker,
Dzięki, ale wątpię, że naprawdę jestem jednym z pierwszych. Ten problem denerwował mnie już od dłuższego czasu.
dummzeuch
1
Jeśli sformatujesz dysk jako tablicę partycji GUID (GPT) zamiast MSDOS lub unix, (używając partycji gnu). Twój dysk będzie miał identyfikator użytkownika, partycje będą mieć identyfikator użytkownika, a dysk ext2 / 3/4 może mieć własny identyfikator użytkownika. Zwykle mogę znaleźć dyski za pomocą / dev / disk / by-uuid i partycji według / dev / disk / by-partuuid
Rahly,

Odpowiedzi:

9

Twoje początkowe pytanie ma już kilka dobrych odpowiedzi, więc skupię się na tle twojego pytania, na etykietach dysków.

Używam numeru seryjnego napędu do drukowania etykiet dla wnęk typu hot swap - to najlepszy sposób na jednoznaczną i konsekwentną identyfikację napędu. Nie zmieni się niezależnie od tego, do której wnęki lub do którego kontrolera jest podłączony.

Nie wspominasz, czy używasz Linuksa, czy innego Uniksa, ale w Linuksie możesz uzyskać listę dysków (i partycji, które chcemy wykluczyć) z ich marką, modelem i numerem seryjnym, patrząc w / katalog dev / disk / by-id /. Uważam, że przydatny jest następujący alias 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'

(pasujące do scsi-*znalezienia wszystkich „podobnych do SCSI” dysków, w tym dysków SATA i SAS. w systemach z tylko dyskami SATA, również ata-*by działały)

np. na jednym z moich serwerów ZFS, generuje dane wyjściowe w następujący sposób:

# list_disks | sortować
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

Jak widać, lista / dev / disk / by-id zawiera markę i numer modelu każdego dysku, a także numer seryjny. Wszystkie są dyskami SATA podłączonymi do portów SATA lub SAS w kontrolerze LSI SAS-2008.

Gdybym miał podłączoną drukarkę etykiet, łatwo byłoby wydrukować etykiety na podstawie wyników list_disks. Zamiast tego użyłem starej ręcznej pisarki etykiet, ponieważ to właśnie miałem. Wydrukowane etykiety zawierają tylko numer seryjny bez marki / modelu (to wystarczy, aby zidentyfikować dysk, gdy zajdzie taka potrzeba). Etykiety przydają się w przypadku awarii dysku i wymagają wymiany.

cas
źródło
Myślę, że to najlepsze rozwiązanie mojego rzeczywistego problemu, ale nie mogę zaakceptować tego jako odpowiedzi, ponieważ nie odpowiada na pytanie. Chyba że zmienię pytanie, co prawdopodobnie nie jest dobrym pomysłem. Dzięki.
dummzeuch
nie ma problemu, jak powiedziałeś, nie odpowiedział bezpośrednio na pytanie. ale było przydatne i mam nadzieję, że ktoś inny uzna to za przydatne w przyszłości. btw, tutaj jest udoskonaloną wersją aliasu: 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'. znajduje również dyski USB i pozbywa się obcych danych na wyjściu.
cas
7

Jeśli mówimy o Linuksie, myślę, że możesz osiągnąć to, czego chcesz, udevaby utworzyć dowiązanie symboliczne do swoich urządzeń. Jeśli spojrzysz /etc/udev/rules.d, istnieje plik o nazwie 70-persistent-cd.ruleso treści zawierającej takie wiersze jak:

SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.2-scsi-:0:0:0", SYMLINK+="cdrom", ENV{GENERATED}="1"

W ten sposób tworzy dowiązanie symboliczne /dev/cdromdo urządzenia identyfikowanego przez jego adres magistrali PCI. Powinieneś być w stanie osiągnąć to, co chcesz, identyfikując dysk twardy za pomocą jego numeru (numer zatoki? Przepraszam, nie ma doświadczenia) i stosując podobną składnię do powyższej, aby /dev/bay1na przykład dodać dowiązanie symboliczne . udevPomocny może być następujący artykuł o zasadach pisania :

Pisanie reguł udev

Uwaga

Dzięki odpowiedzi SLM, proszę zauważyć, że to rozwiązanie sprawia, że ​​etykiety są specyficzne dla wnęk na dyski twarde, a nie znajdujące się w nich dyski. Dlatego jeśli użyjesz etykiet /dev/bay1i /dev/bay2masz dysk twardy A we wnęce 1 i dysk twardy B we wnęce 2, wówczas /dev/bay1odnosi się do dysku A i /dev/bay2odnosi się do dysku B. Jeśli z jakiegoś powodu zamienisz dyski A i B, Ci /dev/bay1powołując się na dysku B, a /dev/bay2odnoszące się do dysku A. Z twojego pytania, uważam, że to jest twój zamiar. Proszę popraw mnie jeżeli się mylę.

Joseph R.
źródło
1
Do takiego dopasowania polecam użycie numeru modelu i numeru seryjnego. Nadal występuje z zastrzeżeniami wymienionymi przez slm, ale zapewni, że „etykieta” dysku pozostanie spójna bez względu na to, co się z nim stanie lub innymi dyskami w systemie.
CVn
Lepiej nadal preferuje unikalną WWN. Zobacz tę odpowiedź .
Tom Hale,
6

Nie tworzysz partycji e2label, tylko systemy plików e2label. Te systemy plików mogą znajdować się na partycjach plików, na całych dyskach, na blokach sieciowych ... to nie ma znaczenia.

Tak więc, jeśli bezpośrednio jest system plików ext2 / 3/4 /dev/sda, możesz oznaczyć go tak samo, jak ten, który byłby włączony /dev/sda1.

Teraz, jeśli nie ma bezpośrednio systemu plików, /dev/sdaale na przykład /dev/sdajest podzielony na partycje (przy użyciu GPT, MBR, LVM ...) na kilka partycji, to oczywiście nie możesz tego użyć e2label /dev/sda.

W partycjonowaniu GPT możesz nadawać nazwy partycjom, abyś mógł utworzyć dużą partycję z jednym sektorem o nazwie ułatwiającej identyfikację dysku. Możesz to zrobić za pomocą cpolecenia w gdisk.

Stéphane Chazelas
źródło
3

Aby odpowiedzieć na pytanie, czy możliwe jest oznaczenie dysku zamiast partycji, odpowiedź brzmi „nie”. Nie znam żadnej metody, aby to zrobić.

Możesz użyć metody opisanej przez @JosephR, ale zdaj sobie sprawę, że ta konfiguracja jest zależna od systemu, więc jeśli chcesz przenieść ten dysk twardy do innego systemu, zaproponowane przez niego „etykietowanie” zostanie utracone. Nie jest powiązany z dyskiem w żaden znaczący sposób.

Nawiasem mówiąc, możesz zobaczyć etykiety i zestaw UUID dla różnych dysków za pomocą blkidpolecenia.

Przykład

$ 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" 
slm
źródło
Dobrze, że konfiguracja zależy od systemu. Z pytania wynika, że ​​OP jest tego świadomy: chcą oznaczyć wnęki na dyski twarde, a nie znajdujące się w nich dyski twarde. Na wszelki wypadek dodaję to jako notatkę do mojej odpowiedzi.
Joseph R.
@Marco Ale blkidwydaje się tylko wyświetlać listę partycji, a nie urządzeń, co nie jest tym, czym interesuje się OP.
Joseph R.,
Nie, naprawdę chciałem oznaczyć dyski, a nie zatoki. Ale rozważę tę opcję.
dummzeuch
Możliwe jest oznaczenie dysku, sam Linux to robi /dev/disk/by-idi możesz to zrobić, udevjak pokazano w tej odpowiedzi .
Tom Hale,
@TomHale - nie rozumiesz mnie. Ta etykieta nie jest stosowana do samego dysku twardego, ale jest utrzymywana w samym systemie Linux. Jeśli miałbyś usunąć ten dysk twardy z systemu, etykieta nie byłaby już dostępna w innych systemach, do których byłby podłączony dysk twardy. To zależy od systemu, dlatego moja rada jest prawidłowa. Odwróć DV.
slm
3

Zakładam, że twoim głównym celem jest jednoznaczna identyfikacja dysku fizycznego. Niestety nie wierzę, że istnieje standardowy sposób oznaczania dysku w taki sam sposób, jak można oznaczyć system plików.

Jednym ze sposobów jest użycie modelu dysku i numeru seryjnego. W systemie Linux możesz pobrać te identyfikatory za pomocą hdparm -i /dev/sdX. Zaletą numeru seryjnego jest to, że może być już wydrukowany na naklejce producenta. (Zakładam, że najbardziej interesujesz się Linuksem, ponieważ wspomniałeś e2labelw swoim pytaniu. Jeśli tak, edytuj swoje pytanie i dodaj tag ).

Jeśli używasz sprzętowego kontrolera RAID, hdparmmoże nie działać, w takim przypadku musisz skonsultować się z narzędziami wiersza polecenia kontrolera RAID.

Jeśli chcesz zidentyfikować go przez coś w zawartości dysku, możesz użyć identyfikatora GUID dysku, który jest zapisany w nagłówku tablicy partycji GPT ( bajty 56-71 LBA 1 ). Jest to dowolny losowy ciąg, a nie wybrana etykieta, ale jest podobny do etykiety, ponieważ jest trwały, dopóki nie zdecydujesz się zablokować tablicy partycji. W systemie Linux można wyświetlić identyfikator GUID dysku gdisk -l /dev/sdX.

200_sukces
źródło
1

Na podstawie odpowiedzi, które otrzymałem (Dzięki chłopaki!), Wydaje się, że nie ma sposobu na etykietowanie dysków, a jedynie partycje. Więc odpowiedź prawdopodobnie brzmi „NIE”.

Przejdę do sugestii zaproponowanych przez @cas i @ 200_success: nakleję numery seryjne dysków naklejką na drzwiach wnęki.

Utworzenie małej partycji na każdym dysku, aby móc nadać jej nazwę (zgodnie z sugestią @Stephane Chazelas) jest również opcją, ale myślę, że byłoby to zbyt mylące dla kogoś, kto mógłby później utrzymywać system .

dummzeuch
źródło
1

Utwórz udevregułę, korzystając z gwarantowanego unikalnego WWN dysku (jeśli taki istnieje), w przeciwnym razie używając połączonego identyfikatora dostawcy i numeru seryjnego:

  1. Uzyskaj wymagane wartości:

    udevadm info -q all /dev/<YOUR-DEVICE-HERE> | egrep "(WWN|SERIAL|VENDOR_ID)="
    
  2. Masuj te wartości, udev rulestakie jak:

    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

Aby automatycznie nazwać dowiązanie symboliczne przy użyciu wartości podanych przez udevadm info -q all /dev/<YOUR-DEVICE>, możesz użyć:

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

Możliwe jest również tworzenie ENVzmiennych z ATTRSwartości, aby uzyskać krótszy unikalny identyfikator.

Tom Hale
źródło
0

Jeśli ls /dev/disk-by-path/pci*...

Na pewno zobaczysz ścieżkę PCI dla każdej wnęki napędu. Wystarczy użyć 1 znanego dysku, aby mieć pewność, że etykiety są prawidłowe.

Użyj, blkid /dev/disk-by-path/pci*aby zobaczyć, które partycje dysku znajdują się na ścieżce PCI.

Możesz zamontować również przy użyciu tej ścieżki.

Robert
źródło
0

Lubię rozwiązanie @cas, ale oto moje 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
MERM
źródło
-1

Dysk jest już oznaczony jako sda, sdb, sdc... Przegrody są następnie znakowane na przykład na sda: sda1, sda2...

Możesz wyświetlić listę wszystkich etykiet dysków i partycji ls /dev/sd*

Alko
źródło
4
Niestety te nazwy urządzeń zmieniają się, gdy przenoszę dysk z jednego komputera na inny lub z jednego kontrolera na inny.
dummzeuch