Bisakah saya memberi label perangkat disk daripada partisi?

24

Saya tahu tentang program e2label dan teman-teman untuk melampirkan label ke partisi disk misalnya

e2label /dev/sda1 bla

Yang ingin saya lakukan adalah sesuatu yang berbeda: Saya ingin membuat label untuk hard drive, yaitu untuk / dev / sda, bukan untuk partisi.

Apakah itu mungkin dan jika ya, bagaimana?

EDIT: Latar Belakang: Dalam kasus dengan beberapa rongga HD saya ingin menaruh label (kertas) di pintu rongga fisik dan meletakkan label yang sama secara logis pada disk yang telah saya taruh di sana.

EDIT2: Ini tentang server Ubuntu Linux 12.04.

EDIT3: Pada partisi GPT ada juga partlabel, yang dapat diatur dengan misal parted. Lihat /server//q/681088/76442

dummzeuch
sumber
1
Ini adalah pertanyaan yang bagus karena Anda adalah salah satu yang paling cocok, yang memahami konsepnya dengan benar. Tujuan utama label adalah untuk mengidentifikasi secara unik partisi bahkan ketika drive dihitung secara berbeda setelah reboot berikutnya. Tetapi sementara drive mungkin akan disusun ulang, partisi tetap pada drive mereka. Jadi akan lebih tepat untuk memberikan drive UUID / label dan bukan partisi. Ini berarti, partisi tersebut akan dinamai UUID / 1, UUID / 2 dan seterusnya. Tidak ada yang salah dalam menambahkan label ke partisi, tetapi kasus default harus menggunakan UUID per drive dan bukan per partisi.
Patrick Häcker
Terima kasih, tetapi saya ragu bahwa saya benar-benar salah satu yang pertama. Masalah ini sudah lama membuat saya kesal.
dummzeuch
1
Jika Anda memformat disk Anda sebagai tabel partisi GUID (GPT), bukan MSDOS atau unix, (menggunakan gnu berpisah). Drive Anda akan memiliki uuid, partisi akan memiliki uuid, dan drive ext2 / 3/4 dapat memiliki uuid sendiri. Saya biasanya dapat menemukan drive menggunakan / dev / disk / by-uuid dan partisi oleh / dev / disk / by-partuuid
Rahly

Jawaban:

9

Pertanyaan awal Anda sudah memiliki beberapa jawaban bagus, jadi saya akan fokus pada latar belakang pertanyaan Anda, memberi label disk.

Saya menggunakan nomor seri drive untuk mencetak label untuk hot swap bay - ini adalah cara terbaik untuk mengidentifikasi drive secara unik dan konsisten. Itu tidak akan berubah terlepas dari rongga mana, atau pengontrol mana ia terhubung.

Anda tidak menyebutkan apakah Anda menggunakan Linux atau Unix lain, tetapi di Linux Anda bisa mendapatkan daftar disk (dan partisi, yang ingin kami kecualikan) dengan merek, model, dan nomor seri dengan melihat di / direktori dev / disk / by-id /. Saya menemukan alias bash berikut berguna untuk ini:

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'

(cocok untuk scsi-*menemukan semua drive "scsi-like", termasuk drive SATA dan SAS. pada sistem dengan hanya drive SATA, ata-*akan berfungsi juga)

mis. pada salah satu sistem server ZFS saya, ia menghasilkan keluaran seperti ini:

# list_disks | menyortir
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

Seperti yang Anda lihat, daftar / dev / disk / by-id menyertakan nomor merek dan model setiap drive, serta nomor seri. Semuanya drive SATA yang dicolokkan ke port SATA atau port SAS pada pengontrol LSI SAS-2008.

Jika saya memiliki printer label yang terpasang, akan cukup mudah untuk mencetak label berdasarkan output dari list_disks. Saya menggunakan label-writer manual lama karena itulah yang saya miliki. Label yang dicetak hanya berisi nomor seri tanpa merek / model (itu cukup bagi saya untuk mengidentifikasi drive ketika saya perlu). Label sangat berguna ketika drive gagal dan perlu diganti.

cas
sumber
Saya pikir ini adalah solusi terbaik untuk masalah saya yang sebenarnya, tetapi saya tidak dapat menerima ini sebagai jawaban karena tidak menjawab pertanyaan. Kecuali saya memodifikasi pertanyaan yang mungkin bukan ide yang bagus. Terima kasih.
dummzeuch
tidak masalah, seperti yang Anda katakan itu tidak langsung menjawab pertanyaan. tapi itu berguna dan semoga orang lain akan menemukannya berguna di masa depan. btw, di sini adalah versi perbaikan dari alias: 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'. ia menemukan disk usb juga dan menghilangkan data asing di output.
cas
7

Jika ini adalah Linux yang sedang kita bicarakan, maka saya pikir Anda dapat mencapai apa yang ingin Anda gunakan udevuntuk membuat symlink ke perangkat Anda. Jika Anda melihat /etc/udev/rules.d, ada file bernama 70-persistent-cd.rulesyang isinya memiliki garis seperti:

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

Apa yang dilakukan adalah menciptakan symlink /dev/cdromke perangkat yang diidentifikasi oleh alamat bus PCI-nya. Anda harus dapat mencapai apa yang Anda inginkan dengan mengidentifikasi HDD menggunakan (nomor rongga? Maaf tidak ada pengalaman di sana) dan menggunakan sintaks yang sama dengan yang di atas untuk menambahkan symlink seperti /dev/bay1, misalnya. Artikel berikut tentang udevaturan penulisan mungkin bermanfaat:

Menulis aturan udev

Catatan

Berkat jawaban slm, harap dicatat bahwa solusi ini membuat label khusus untuk rongga HDD daripada disk di dalamnya. Jadi, jika Anda menggunakan label /dev/bay1dan /dev/bay2dan Anda memiliki hard disk A di rongga 1 dan hard disk B di rongga 2, maka /dev/bay1merujuk ke disk A dan /dev/bay2mengacu ke disk B. Jika, karena alasan tertentu, Anda menukar disk A dan B, Anda bisa /dev/bay1merujuk ke disk B dan /dev/bay2merujuk ke disk A. Dari pertanyaan Anda, saya percaya bahwa ini adalah maksud Anda. Harap perbaiki saya jika saya salah.

Joseph R.
sumber
1
Saya akan merekomendasikan menggunakan nomor model dan nomor seri untuk pencocokan tersebut. Itu masih datang dengan peringatan yang disebutkan oleh slm, tetapi akan memastikan bahwa "label" disk tetap konsisten terlepas dari apa yang terjadi padanya atau disk lain dalam sistem.
CVn
Lebih baik lagi adalah memilih WWN yang dijamin-unik. Lihat jawaban ini .
Tom Hale
6

Anda tidak e2label partisi, Anda e2label sistem file. Sistem file tersebut dapat berupa partisi pada file, pada seluruh disk, pada perangkat blok jaringan ... tidak masalah.

Jadi ya, jika ada filesystem ext2 / 3/4 secara langsung /dev/sda, Anda dapat memberi label yang sama seperti yang akan aktif /dev/sda1.

Sekarang, jika tidak ada filesystem langsung /dev/sdatetapi misalnya, /dev/sdadipartisi (menggunakan GPT, MBR, LVM ...) menjadi beberapa partisi, maka jelas tidak Anda tidak dapat menggunakan e2label /dev/sda.

Di partisi GPT, Anda bisa memberi nama ke partisi, sehingga Anda bisa membuat partisi besar satu sektor dengan nama untuk membantu mengidentifikasi disk Anda. Anda dapat melakukannya dengan cperintah di gdisk.

Stéphane Chazelas
sumber
3

Untuk menjawab pertanyaan Anda jika mungkin memberi label disk sebagai lawan partisi, jawabannya adalah tidak. Saya tidak mengetahui metode apa pun untuk melakukannya.

Anda dapat menggunakan metode yang diuraikan oleh @JosephR, tetapi menyadari bahwa pengaturan ini bergantung pada sistem, jadi jika Anda membawa HDD ke sistem lain, "pelabelan" yang diusulkannya akan hilang. Itu tidak terikat ke disk dengan cara yang berarti.

Secara kebetulan, Anda dapat melihat label dan UUID diatur untuk drive yang berbeda menggunakan blkidperintah.

Contoh

$ 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
sumber
Poin bagus tentang pengaturan yang bergantung pada sistem. Dari pertanyaan, saya pikir OP sadar akan hal itu: mereka ingin memberi label HDD bay daripada hard drive yang sebenarnya di dalamnya. Saya menambahkannya sebagai catatan untuk jawaban saya untuk berjaga-jaga.
Joseph R.
@Marco Tapi blkidsepertinya hanya mencantumkan partisi bukan perangkat, yang bukan hal yang diminati OP.
Joseph R.
Tidak, saya sebenarnya ingin memberi label disk, bukan ruang. Tapi saya akan mempertimbangkan opsi ini.
dummzeuch
Hal ini dimungkinkan untuk label disk, Linux itu sendiri melakukan hal ini dalam /dev/disk/by-iddan Anda dapat melakukannya udev-gaya seperti yang ditunjukkan dalam jawaban ini .
Tom Hale
@ TomHale - Anda kehilangan poin saya. Label itu tidak berlaku untuk HDD itu sendiri, melainkan dipertahankan dalam sistem Linux itu sendiri. Jika Anda menghapus HDD itu dari sistem, label tidak lagi tersedia di sistem lain tempat HDD akan dipasang. Itu tergantung sistem, oleh karena itu saran saya benar. Harap balikkan DV Anda.
slm
3

Saya berasumsi bahwa tujuan utama Anda adalah untuk mengidentifikasi disk fisik. Sayangnya, saya tidak percaya ada cara standar untuk memberi label disk dengan cara yang sama seperti Anda dapat memberi label sistem file.

Salah satu caranya adalah dengan menggunakan model dan nomor seri disk. Di Linux, Anda dapat mengambil pengidentifikasi denganhdparm -i /dev/sdX . Yang menyenangkan tentang nomor seri adalah mungkin sudah dicetak pada stiker pabrik. (Saya berasumsi Anda sangat peduli tentang Linux sejak Anda sebutkan e2labeldalam pertanyaan Anda. Jika demikian, harap edit pertanyaan Anda dan tambahkan tag .)

Jika Anda menggunakan pengontrol RAID perangkat keras, hdparmmungkin tidak bekerja untuk Anda, dalam hal ini Anda harus berkonsultasi dengan alat baris perintah pengontrol RAID Anda.

Jika Anda ingin mengidentifikasinya dengan sesuatu di isi disk, Anda bisa menggunakan GUID disk, yang disimpan di header tabel partisi GPT ( byte 56-71 dari LBA 1 ). Ini adalah string acak sembarang daripada label pilihan Anda, tapi itu seperti label yang tetap sampai Anda memutuskan untuk memecahkan tabel partisi. Di Linux, Anda dapat melihat GUID disk menggunakangdisk -l /dev/sdX .

200_sukses
sumber
1

Berdasarkan jawaban yang saya dapat (Terima kasih teman-teman!) Tampaknya tidak ada cara untuk benar-benar memberi label disk tetapi hanya partisi. Jadi jawabannya mungkin adalah "TIDAK".

Saya akan pergi dengan saran yang diusulkan oleh @cas dan @ 200_success: Saya akan menempel nomor seri disk dengan stiker ke pintu ruang.

Membuat partisi kecil di setiap disk hanya untuk dapat memberi label partisi ini (seperti yang disarankan oleh @Stephane Chazelas) juga merupakan pilihan, tetapi saya pikir itu akan terlalu membingungkan bagi orang lain yang mungkin harus memelihara sistem di lain waktu .

dummzeuch
sumber
1

Buat udevaturan menggunakan WWN unik yang dijamin dari disk (jika ada), jika tidak gunakan gabungan vendor dan ID seri:

  1. Dapatkan nilai yang dibutuhkan:

    udevadm info -q all /dev/<YOUR-DEVICE-HERE> | egrep "(WWN|SERIAL|VENDOR_ID)="
    
  2. Pijat nilai-nilai ini ke dalam udev rulesseperti:

    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

Untuk secara otomatis memberi nama symlink menggunakan nilai yang diberikan oleh udevadm info -q all /dev/<YOUR-DEVICE>, Anda dapat menggunakan:

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

Dimungkinkan juga untuk membuat ENVvariabel dari ATTRSnilai untuk mendapatkan ID unik yang lebih pendek.

Tom Hale
sumber
0

Jika Anda ls /dev/disk-by-path/pci*...

Anda pasti akan melihat jalur PCI untuk setiap ruang drive. Anda hanya perlu menggunakan 1 disk yang dikenal untuk memastikan labelnya benar.

Gunakan blkid /dev/disk-by-path/pci*untuk melihat partisi disk mana yang ada di jalur PCI.

Anda dapat memasang menggunakan jalur itu juga.

Robert
sumber
0

Saya suka solusi @cas, tapi ini 2 ¢ saya

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
sumber
-1

Disk sudah dicap sebagai sda, sdb, sdc... Partisi kemudian diberi label misalnya pada sda: sda1, sda2...

Anda dapat membuat daftar semua label untuk disk dan partisi ls /dev/sd*

Alko
sumber
4
Sayangnya nama perangkat ini berubah jika saya memindahkan disk dari satu komputer ke komputer lain atau dari satu pengontrol ke yang lain.
dummzeuch