Bir bölüm yerine bir disk aygıtını etiketleyebilir miyim?


24

Disk bölümüne etiket yapıştırmak için e2label ve friends programını biliyorum.

e2label /dev/sda1 bla

Yapmak istediğim farklı bir şey: Bir disk için değil, / dev / sda için bir sabit disk için bir etiket oluşturmak istiyorum.

Bu mümkün mü ve evet ise nasıl?

EDIT: Arkaplan: Birden fazla HD bölmesi olan bir durumda, fiziksel bölmenin kapısına etiketleri (kağıt) koymak ve aynı etiketi oraya yerleştirdiğim disk üzerine mantıksal olarak koymak istiyorum.

EDIT2: Bu Ubuntu Linux 12.04 sunucusu ile ilgili.

EDIT3: GPT bölümlerinde, örneğin bölümlenmiş olarak ayarlanabilen bölüm etiketi de vardır. Bkz /server//q/681088/76442


1
Konsepti doğru anlayanlardan biri olduğun için bu harika bir soru. Etiketlerin asıl amacı, sürücüler bir sonraki yeniden başlatmadan sonra farklı numaralandırılmış olsalar bile, bir bölümü benzersiz şekilde tanımlamaktır. Ancak sürücüler yeniden sıralanabilirken, bölümler sürücülerinde sabit kalır. Bu nedenle, disklere bölümlere değil UUID / etiket vermek daha doğru olacaktır. Bu, bölümlerin UUID / 1, UUID / 2 gibi adlar olacağı anlamına gelir. Bölüme bir etiket eklenmesinde yanlış bir şey yoktur, ancak varsayılan durum bölüm başına değil, sürücü başına bir UUID kullanmak olmalıdır.
Patrick Häcker

Teşekkürler, ama gerçekten ilk olduğumdan şüpheliyim. Bu sorun zaten uzun zamandır beni çok etkiledi.
dummzeuch

1
Diskinizi MSDOS veya unix yerine bir GUID bölümleme tablosu (GPT) olarak biçimlendirirseniz (gnu bölümlenmiş). Sürücünüzün bir uuidi olacak, bölmelerin bir uuidi olacak ve ext2 / 3/4 sürücünün de kendi uuid'i olabilir. Genellikle / dev / disk / by-uuid kullanan sürücüleri ve / dev / disk / by-partuuid bölümlerini bulabilirim
Rahly

Yanıtlar:


9

İlk sorunuzun zaten birkaç iyi cevabı var, bu yüzden diskleri etiketleyerek sorunuzun arka planına odaklanacağım.

Çalışırken değiştirilebilir bölmelere etiket yazdırmak için sürücünün seri numarasını kullanıyorum; sürücüyü benzersiz ve tutarlı bir şekilde tanımlamanın en iyi yolu budur. Hangi bölmeye veya hangi denetleyiciye bağlı olduğuna bakılmaksızın değişmez.

Linux veya başka bir Unix kullanıp kullanmadığınızdan bahsetmiyorsunuz, ancak Linux'ta / 'a bakarak marka, model ve seri numaralarını içeren disklerin (ve çıkarmak istediğimiz bölümlerin) listesini alabilirsiniz. dev / disk / kullanıcı kimliği / dizini. Aşağıdaki bash takma adını bu konuda yararlı buluyorum:

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-*SATA ve SAS sürücüleri de dahil olmak üzere tüm "scsi benzeri" sürücüleri bulur. Yalnızca SATA sürücüleri olan sistemlerde ata-*de çalışır)

örneğin, ZFS sunucu sistemlerimden birinde, bunun gibi çıktılar üretir:

# list_disks | çeşit
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

Gördüğünüz gibi / dev / disk / by-id listesi, her sürücünün marka ve model numarasını ve seri numarasını içerir. Hepsi bir SATI ya da LSI SAS-2008 denetleyicisindeki SAS bağlantı noktalarına takılı SATA sürücüleri.

Bir etiket yazıcım takılı olsaydı, çıktısını temel alarak etiketleri basmak yeterince kolay olurdu list_disks. Eski bir manuel etiket yazarı kullandım çünkü sahip olduğum şey buydu. Basılı etiketler sadece marka / model içermeyen seri numarasını içerir (gerektiğinde sürücüyü tanımlamam için bu yeterlidir). Bir sürücü arızalandığında ve değiştirilmesi gerektiğinde etiketler çok kullanışlı olur.


Bunun asıl sorunum için en iyi çözüm olduğunu düşünüyorum, ancak soruyu cevaplamadığı için bunu cevap olarak kabul edemem. Muhtemelen iyi bir fikir olmayan soruyu değiştirmezsem. Teşekkürler.
dummzeuch

sorun değil, dediğiniz gibi doğrudan soruyu cevaplamadı. ancak faydalı oldu ve umarım bir başkası gelecekte yararlı bulacaktır. Btw burada takma geliştirilmiş bir versiyonu var: 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 diskleri de bulur ve çıktıdaki fazla veriden kurtulur.
kas

7

Eğer bahsettiğimiz Linux buysa udev, cihazlarınıza bir sembolik bağlantı oluşturmak için ne kullanmak istediğinizi başarabileceğinizi düşünüyorum . Eğer bakarsak /etc/udev/rules.d, adlı bir dosya var 70-persistent-cd.rules, içeriği gibi satırlar vardır:

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

Bunun yaptığı, /dev/cdromPCI veri yolu adresi tarafından tanımlanan aygıta sembolik bir bağlantı oluşturmasıdır. /dev/bay1Örneğin istediği bir bağlantı eklemek için HDD'yi tanımlayarak (bölme numarası? Üzgünüm deneyimim yok) kullanarak ve yukarıdakiyle benzer bir sözdizimi kullanarak istediğinizi başarabilmelisiniz . Yazma udevkuralları ile ilgili aşağıdaki makale yardımcı olabilir:

Udev kuralları yazmak

Not

SLM'nin cevabı sayesinde, lütfen bu çözümün etiketleri içindeki diskler yerine HDD bölmelerine özgü yaptığını unutmayın. Bu nedenle, etiketleri kullanıyorsanız /dev/bay1ve /dev/bay2ve bölme 1'deki sabit disk A'ya ve bölme 2'deki sabit disk B'ye sahipseniz, o zaman /dev/bay1A diskine ve /dev/bay2B diskine işaret eder. Eğer olsun /dev/bay1Disk B atıfta ve /dev/bay2sorunuza itibaren diski A. kastederek Bunun senin niyet olduğuna inanıyoruz. Yanılıyorsam lütfen beni düzeltin.


1
Bu eşleşme için model numarası ve seri numarasını kullanmanızı tavsiye ederim. Hala slm tarafından belirtilen uyarılarla gelir, ancak diskteki "etiket" in ne olacağına veya sistemdeki diğer disklere bakılmaksızın tutarlı kalmasını sağlar.
CV:

Daha da iyisi, garantili benzersiz WWN'yi tercih etmektir. Bu cevaba bakınız .
Tom Hale

6

Siz e2label bölümlerini bilmiyorsunuz, e2label dosya sistemleri. Bu dosya sistemleri, dosyalar üzerindeki bölümlerde, tüm disklerde, ağ bloğu cihazlarında olabilir ... önemli değil.

Yani evet, eğer doğrudan bir ext2 / 3/4 dosya sistemi /dev/sdavarsa, onu olduğu gibi etiketleyebilirsiniz /dev/sda1.

Şimdi, doğrudan üzerinde bir dosya sistemi yoksa /dev/sda, örneğin, örneğin, /dev/sda(GPT, MBR, LVM ...) birkaç bölüme ayrılırsa, o zaman kesinlikle kullanamazsınız e2label /dev/sda.

GPT bölümlemesinde, bölümlere adlar verebilirsiniz, böylece diskinizi tanımlamanıza yardımcı olacak bir ada sahip sektör kesimi oluşturabilirsiniz. Bunu ckomut ile yapabilirsiniz gdisk.


3

Bir diski bir bölüme göre etiketlemek mümkünse sorunuzu cevaplamak için cevap hayır. Bunu yapmak için hiçbir yöntem farkında değilim.

@JosephR tarafından ana hatlarıyla verilen yöntemi kullanabilirsiniz, ancak bu kurulumun sisteme bağlı olduğunu anlayın, bu yüzden eğer HDD’yi başka bir sisteme götürecekseniz, önerdiği “etiketleme” kaybolacaktı. Diske anlamlı bir şekilde bağlı değildir.

Bu arada, blkidkomutu kullanarak farklı sürücüler için etiketleri ve UUID setlerini görebilirsiniz .

Örnek

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

Kurulumun sisteme bağlı olması hakkında iyi bir nokta. Sorudan, OP'nin bunun farkında olduğunu düşünüyorum: İçlerindeki gerçek sabit diskler yerine HDD bölmelerini etiketlemek istiyorlar. Bu durumda cevabımı not olarak ekliyorum.
Joseph R.

@Marco Ancak blkidOP'nin ilgilendiği şey olmayan aygıtları değil sadece bölümleri listeliyor.
Joseph R.

Hayır, aslında diskleri etiketlemek istedim, yuvaları değil. Ama bu seçeneği değerlendireceğim.
dummzeuch

Bu ise bir disk olarak sınıflandırılması mümkün Linux kendisi yapar /dev/disk/by-idve bunu yapabilirsiniz udevgösterildiği gibi tarzı bu cevap .
Tom Hale

@ TomHale - amacımı kaçırıyorsunuz. Bu etiket HDD'nin kendisine uygulanmaz, ancak Linux sisteminin kendisinde kalır. Bu HDD'yi sistemden çıkarmanız gerekirse, etiket artık HDD’nin monte edileceği diğer sistemlerde mevcut değildir. Bu sisteme bağlıdır, bu yüzden benim tavsiyem doğrudur. Lütfen DV'nizi ters çevirin.
slm

3

Asıl amacınızın açıkça fiziksel bir diski tanımlamak olduğunu farz ediyorum. Ne yazık ki, bir diski bir dosya sistemini etiketleyebileceğiniz gibi etiketlemenin standart bir yolu olduğuna inanmıyorum.

Bir yol diskin modelini ve seri numarasını kullanmaktır. Linux'ta bu tanımlayıcıları ile birlikte alabilirsiniz hdparm -i /dev/sdX. Seri numarasıyla ilgili güzel şey, üreticinin etiketine zaten basılmış olabilir. (Sorunuzda bahsettiğinizden beri Linux’a daha çok önem e2labelverdiğinizi varsayıyorum . Öyleyse, lütfen sorunuzu düzenleyin ve etiketini ekleyin .)

Bir donanım RAID denetleyicisi kullanıyorsanız, hdparmsizin için çalışmayabilir; bu durumda bunun yerine RAID denetleyicinizin komut satırı araçlarına başvurmanız gerekir.

Bunu diskin içeriğindeki bir şeyle tanımlamak istiyorsanız, GPT bölüm tablosu başlığında ( LBA 1'in 56-71 baytı) depolanan GUID diskini kullanabilirsiniz . Seçtiğiniz bir etiket yerine rastgele rastgele bir dizedir, ancak bölüm tablosunu kapatmaya karar verene kadar kalıcı olduğu bir etiket gibidir. Linux'ta GUID diskini kullanarak görebilirsiniz gdisk -l /dev/sdX.


1

Aldığım cevaplara göre (Teşekkürler çocuklar!) Diskleri etiketlemenin bir yolu yok, sadece bölümleri var gibi görünüyor. Yani cevap muhtemelen "HAYIR" dır.

@Cas ve @ 200_success tarafından önerilen önerileri uygulayacağım: Disklerin seri numaralarını bir çıkartma ile bölmelerin kapılarına yapıştırırım.

Sadece bu bölümü etiketleyebilmek için her diskte küçük bir bölüm oluşturmak (@Stephane Chazelas tarafından önerildiği gibi) da bir seçenektir, ancak bunun daha sonra sistemi sürdürmesi gerekebilecek bir başkası için kafa karıştırıcı olacağını düşünüyorum. .


1

udevDiskin garantili benzersiz WWN'sini (varsa) bir kural oluşturun , aksi takdirde birleşik satıcı ve seri kimliklerini kullanın:

  1. Gerekli değerleri alın:

    udevadm info -q all /dev/<YOUR-DEVICE-HERE> | egrep "(WWN|SERIAL|VENDOR_ID)="
    
  2. Bu değerleri aşağıdaki udev rulesgibi masaj yapın :

    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

Simgesini udevadm info -q all /dev/<YOUR-DEVICE>, verilen değerleri kullanarak otomatik olarak adlandırmak için kullanabilirsiniz:

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

Değerlerden, daha kısa bir benzersiz kimlik elde etmek için ENVdeğişkenler oluşturmak da mümkündür ATTRS.


0

Eğer sen ls /dev/disk-by-path/pci*...

Her sürücü bölmesi için kesinlikle bir PCI yolu göreceksiniz. Etiketleri doğru aldığınızdan emin olmak için bilinen 1 diski kullanmanız yeterlidir.

blkid /dev/disk-by-path/pci*Hangi disk bölümlerinin PCI yolunda olduğunu görmek için kullanın .

Bu yolu kullanarak da bağlayabilirsiniz.


0

@Cas çözümünü beğendim, ama işte benim 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

Olarak, disk zaten etiketli sda, sdb, sdc... bölümleri daha sonra, örneğin etiketlenmiş sda: sda1, sda2...

Diskler ve bölümler için tüm etiketleri ls /dev/sd*


4
Ne yazık ki, diski bir bilgisayardan diğerine veya bir denetleyiciden diğerine taşıdığımda bu aygıt adları değişir.
dummzeuch
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.