क्या मैं एक विभाजन के बजाय एक डिस्क डिवाइस को लेबल कर सकता हूं?


24

मुझे e2label और दोस्तों के प्रोग्राम के बारे में एक डिस्क विभाजन जैसे लेबल को जोड़ने के लिए पता है

e2label /dev/sda1 bla

मैं जो करना चाहता हूं वह कुछ अलग है: मैं एक हार्ड ड्राइव के लिए एक लेबल बनाना चाहता हूं, जो कि / dev / sda के लिए है, विभाजन के लिए नहीं।

क्या यह संभव है और यदि हाँ, तो कैसे?

संपादित करें: पृष्ठभूमि: एक से अधिक HD बे के मामले में मैं भौतिक बे के दरवाजे पर (कागज) लेबल लगाना चाहता हूं और उसी लेबल को तार्किक रूप से उस डिस्क पर रखूंगा जिसे मैंने वहां रखा है।

EDIT2: यह उबंटू लिनक्स 12.04 सर्वर के बारे में है।

EDIT3: GPT विभाजनों पर भी partlabel है, जिसे उदाहरण के लिए parted के साथ सेट किया जा सकता है। Https://serverfault.com/q/681088/76442 देखें


1
यह एक शानदार सवाल है क्योंकि आप फिट हैं, जिन्होंने इस अवधारणा को सही माना है। लेबल का मुख्य उद्देश्य विशिष्ट रूप से एक विभाजन की पहचान करना है, जब ड्राइव को अगले रिबूट के बाद अलग तरीके से एन्यूमरेट किया जाता है। लेकिन जब ड्राइव को फिर से व्यवस्थित किया जा सकता है, तो विभाजन उनके ड्राइव पर स्थिर रहते हैं। इसलिए ड्राइव को UUID / लेबल देना अधिक सही होगा और विभाजन नहीं। इसका मतलब यह होगा, कि विभाजन यूयूआईडी / 1, यूयूआईडी / 2 और इसी तरह के नाम होंगे। विभाजन में एक लेबल जोड़ने में कुछ भी गलत नहीं है, लेकिन डिफ़ॉल्ट मामला प्रति ड्राइव UUID का उपयोग करने के लिए होना चाहिए न कि विभाजन के अनुसार।
पैट्रिक हैकर

धन्यवाद, लेकिन मुझे संदेह है कि मैं वास्तव में पहले में से एक हूं। इस समस्या ने मुझे लंबे समय से परेशान कर दिया है।
dummzeuch

1
यदि आप अपनी डिस्क को MSDOS या यूनिक्स के बजाय GUID पार्टीशन टेबल (GPT) के रूप में स्वरूपित करते हैं, (gnu parted का उपयोग करके)। आपकी ड्राइव में एक uuid होगा, विभाजन में एक uuid होगा, और ext2 / 3/4 ड्राइव में अपना स्वयं का uid होगा। मैं आमतौर पर / dev / डिस्क / by-uuid और / dev / डिस्क / by-partuuid द्वारा विभाजन का उपयोग करके पा सकता हूं
22

जवाबों:


9

आपके प्रारंभिक प्रश्न के पहले से ही कुछ अच्छे उत्तर हैं, इसलिए मैं आपके प्रश्न की पृष्ठभूमि पर ध्यान केंद्रित करूँगा, डिस्क लेबलिंग।

मैं गर्म स्वैप खण्ड के लिए लेबल प्रिंट करने के लिए ड्राइव के सीरियल नंबर का उपयोग करता हूं - यह विशिष्ट तरीके से और लगातार ड्राइव की पहचान करने का सबसे अच्छा तरीका है। यह किस बे, या किस कंट्रोलर में प्लग किया गया है, इसकी परवाह किए बिना यह नहीं बदलेगा।

आप उल्लेख नहीं करते हैं कि आप लिनक्स या किसी अन्य यूनिक्स का उपयोग कर रहे हैं, लेकिन लिनक्स में आप अपने ब्रांड, मॉडल और सीरियल नंबर के साथ डिस्क (और विभाजन, जिन्हें हम बाहर करना चाहते हैं) की एक सूची प्राप्त कर सकते हैं / देव / डिस्क / बाय-आईडी / निर्देशिका। मुझे इसके लिए निम्नलिखित बैश उर्फ ​​उपयोगी लगता है:

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 और SAS ड्राइव सहित सभी "scsi- जैसी" ड्राइव के लिए मिलान , केवल 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 / डिस्क / बाय-आईडी लिस्टिंग में प्रत्येक ड्राइव का ब्रांड और मॉडल नंबर, साथ ही सीरियल नंबर शामिल है। वे सभी SATA ड्राइव एक LSI SAS-2008 नियंत्रक पर SATA पोर्ट या SAS पोर्ट में प्लग किए गए हैं।

यदि मेरे पास एक लेबल प्रिंटर जुड़ा हुआ है, तो आउटपुट के आधार पर लेबल प्रिंट करना काफी आसान होगा list_disks। मैंने इसके बजाय एक पुराने मैनुअल लेबल-लेखक का उपयोग किया क्योंकि मेरे पास यही था। मुद्रित लेबल में केवल ब्रांड / मॉडल के बिना सीरियल नंबर होता है (यह मेरे लिए ड्राइव की पहचान करने के लिए पर्याप्त है जब मुझे आवश्यकता होती है)। जब ड्राइव विफल हो जाती है और लेबल को बदलने की आवश्यकता होती है, तो लेबल बहुत काम आते हैं।


मुझे लगता है कि यह मेरी वास्तविक समस्या का सबसे अच्छा समाधान है, लेकिन मैं इसे उत्तर के रूप में स्वीकार नहीं कर सकता क्योंकि यह प्रश्न का उत्तर नहीं देता है। जब तक मैं उस प्रश्न को संशोधित नहीं करता जो शायद एक अच्छा विचार नहीं है। धन्यवाद।
dummzeuch

कोई समस्या नहीं है, जैसा कि आपने कहा कि यह सीधे सवाल का जवाब नहीं था। लेकिन यह उपयोगी था और उम्मीद है कि भविष्य में कोई और इसे उपयोगी पाएगा। btw, यहाँ उपनाम का एक बेहतर संस्करण है 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 डिस्क के रूप में अच्छी तरह से पाता है और आउटपुट में बाहरी डेटा से छुटकारा पाता है।
कैस

7

यदि यह लिनक्स है जिसके बारे में हम बात कर रहे हैं, तो मुझे लगता है कि आप 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नियम पर निम्नलिखित लेख सहायक हो सकता है:

Udv नियम लिखना

ध्यान दें

एसएलएम के जवाब के लिए धन्यवाद, कृपया ध्यान दें कि यह समाधान उनके अंदर डिस्क के बजाय एचडीडी के खण्डों के लिए लेबल को विशिष्ट बनाता है। इस प्रकार, यदि आप लेबल का उपयोग करते हैं /dev/bay1और /dev/bay2आपके पास बे 1 में हार्ड डिस्क ए और बे 2 में हार्ड डिस्क है, तो /dev/bay1डिस्क ए को /dev/bay2संदर्भित करता है और डिस्क बी को संदर्भित करता है। यदि, किसी कारण से, आप ए और बी डिस्क स्वैप करते हैं, आप /dev/bay1डिस्क बी का /dev/bay2जिक्र करते हैं और डिस्क ए का जिक्र करते हैं। आपके प्रश्न से, मुझे विश्वास है कि यह आपकी मंशा है। कृपया मुझे सुधारें अगर मैं गलत हूं।


1
मैं ऐसे मेल के लिए मॉडल नंबर और सीरियल नंबर का उपयोग करने की सलाह दूंगा। यह अभी भी स्लम द्वारा उल्लिखित कैविएट्स के साथ आता है, लेकिन यह सुनिश्चित करेगा कि डिस्क "लेबल" के अनुरूप है चाहे जो भी हो या सिस्टम में कोई अन्य डिस्क हो।
एक CVn

बेहतर अभी भी गारंटी-अद्वितीय WWN पसंद कर रहा है। इस जवाब को देखें ।
टॉम हेल

6

आप e2label विभाजन नहीं करते हैं, आप फ़ाइल सिस्टम e2label करते हैं। वे फाइल सिस्टम फाइलों पर विभाजन पर, पूरे डिस्क पर, नेटवर्क ब्लॉक उपकरणों पर हो सकते हैं ... इससे कोई फर्क नहीं पड़ता।

तो हाँ, अगर कोई ext2 / 3/4 फाइलसिस्टम सीधे पर है /dev/sda, तो आप इसे उसी तरह से लेबल कर सकते हैं, जिस पर होगा /dev/sda1

अब, अगर सीधे तौर पर कोई फ़ाइल सिस्टम नहीं है /dev/sda, लेकिन उदाहरण के लिए, /dev/sdaविभाजन में (GPT, MBR, LVM ... का उपयोग करके) कई विभाजनों में किया गया है, तो जाहिर है कि आप उपयोग नहीं कर सकते e2label /dev/sda

जीपीटी विभाजन में, आप विभाजन को नाम दे सकते हैं, इसलिए आप अपनी डिस्क की पहचान करने में मदद करने के लिए एक नाम के साथ एक सेक्टर बड़ा विभाजन बना सकते हैं। आप 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" 

सेटअप प्रणाली-निर्भर होने के बारे में अच्छी बात है। इस सवाल से, मुझे लगता है कि ओपी को इस बारे में पता है: वे अपने अंदर वास्तविक हार्ड ड्राइव के बजाय एचडीडी बे को लेबल करना चाहते हैं। मैं इसे केवल मेरे उत्तर के लिए एक नोट के रूप में जोड़ रहा हूँ।
जोसेफ आर।

@ मार्को लेकिन blkidकेवल उपकरणों के विभाजन को सूचीबद्ध करता है न कि उपकरणों को, जो ओपी में दिलचस्पी नहीं रखता है।
यूसुफ आर।

नहीं, मैं वास्तव में डिस्कों को लेबल करना चाहता था, न कि खण्डों को। लेकिन मैं इस विकल्प पर विचार करूंगा।
dummzeuch

यह है एक डिस्क लेबल करने के लिए संभव है, लिनक्स अपने आप में यह करता है /dev/disk/by-idऔर आप यह कर सकते udevशैली के रूप में में दिखाया गया है इस सवाल का जवाब
टॉम हेल

@TomHale - आपको मेरी बात याद आ रही है। वह लेबल HDD पर ही लागू नहीं है, बल्कि लिनक्स सिस्टम में ही बना हुआ है। यदि आप सिस्टम से उस HDD को निकालना चाहते थे, तो अन्य सिस्टम पर वह लेबल उपलब्ध नहीं है, जिस पर HDD को माउंट किया जाएगा। यह सिस्टम पर निर्भर है, इसलिए मेरी सलाह सही है। कृपया अपने DV को उल्टा करें।
स्लम

3

मैं मानता हूं कि आपका मुख्य लक्ष्य अनायास ही एक भौतिक डिस्क की पहचान करना है। दुर्भाग्य से, मुझे विश्वास नहीं है कि एक डिस्क को उसी तरह लेबल करने का एक मानक तरीका है जिस तरह से आप एक फाइल सिस्टम को लेबल कर सकते हैं।

एक तरीका डिस्क के मॉडल और सीरियल नंबर का उपयोग करना है। लिनक्स में, आप उन पहचानकर्ताओं को पुनः प्राप्त कर सकते हैं hdparm -i /dev/sdX। सीरियल नंबर के बारे में अच्छी बात यह है कि यह पहले से ही निर्माता के स्टिकर पर मुद्रित हो सकता है। (मुझे लगता है कि आप e2labelअपने प्रश्न में उल्लिखित लिनक्स के बारे में ज्यादातर ध्यान रखते हैं । यदि ऐसा है, तो कृपया अपना प्रश्न संपादित करें और टैग जोड़ें ।)

यदि आप एक हार्डवेयर RAID नियंत्रक का उपयोग कर रहे हैं, hdparmतो आपके लिए काम नहीं कर सकता है, इस स्थिति में आपको अपने RAID नियंत्रक के कमांड-लाइन टूल के बजाय परामर्श करना होगा।

यदि आप डिस्क की सामग्री में किसी चीज़ से इसे पहचानना चाहते हैं, तो आप डिस्क GUID का उपयोग कर सकते हैं, जो GPT पार्टीशन टेबल हैडर में संग्रहीत है ( LBA 1 का 56-71 बाइट्स )। यह आपकी पसंद के लेबल के बजाय एक अनियंत्रित यादृच्छिक स्ट्रिंग है, लेकिन यह उस लेबल की तरह है जिसमें यह तब तक बना रहता है जब तक आप विभाजन तालिका को क्लोब करने का निर्णय नहीं लेते। लिनक्स में, आप डिस्क 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*...

आप निश्चित रूप से प्रत्येक ड्राइव बे के लिए एक पीसीआई पथ देखेंगे। आपको केवल लेबल ज्ञात करने के लिए 1 ज्ञात डिस्क का उपयोग करने की आवश्यकता है।

blkid /dev/disk-by-path/pci*PCI पथ पर कौन से डिस्क विभाजन हैं यह देखने के लिए उपयोग करें ।

आप उस पथ का उपयोग करके भी माउंट कर सकते हैं।


0

मुझे @cas समाधान पसंद है, लेकिन यहां मेरा 2 solution है

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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.