ฉันสามารถติดป้ายชื่ออุปกรณ์ดิสก์แทนพาร์ติชันได้หรือไม่


24

ฉันรู้เกี่ยวกับโปรแกรม e2label และเพื่อน ๆ เพื่อติดฉลากเข้ากับพาร์ติชั่นดิสก์เช่น

e2label /dev/sda1 bla

สิ่งที่ฉันต้องการทำคือสิ่งที่แตกต่าง: ฉันต้องการสร้างป้ายกำกับสำหรับฮาร์ดไดรฟ์สำหรับ / dev / sda ไม่ใช่สำหรับพาร์ติชัน

เป็นไปได้และถ้าใช่เป็นอย่างไร

แก้ไข: พื้นหลัง: ในกรณีที่มีช่อง HD หลายช่องฉันต้องการติดป้าย (กระดาษ) ที่ประตูของช่องใส่ของจริงและใส่ป้ายชื่อเดียวกันลงบนดิสก์ที่ฉันวางไว้

EDIT2: นี่เป็นเรื่องเกี่ยวกับเซิร์ฟเวอร์ Ubuntu Linux 12.04

EDIT3: บนพาร์ติชัน GPT ยังมี partlabel ซึ่งสามารถตั้งค่าได้เช่นแยกส่วน ดู/server//q/681088/76442


1
นี่เป็นคำถามที่ยอดเยี่ยมเพราะคุณเป็นหนึ่งในคนที่มีแนวคิดที่ถูกต้อง วัตถุประสงค์หลักของป้ายกำกับคือการระบุพาร์ติชันที่ไม่ซ้ำกันแม้ว่าไดรฟ์จะระบุแตกต่างกันหลังจากรีบูตครั้งถัดไป แต่ในขณะที่ไดรฟ์อาจได้รับการจัดเรียงใหม่พาร์ติชันยังคงอยู่ในไดรฟ์ของพวกเขา ดังนั้นมันจะถูกต้องมากขึ้นเพื่อให้ไดรฟ์ UUID / ฉลากไม่ใช่พาร์ติชัน นี่หมายความว่าพาร์ติชันนั้นจะเป็นชื่อเป็น UUID / 1, UUID / 2 เป็นต้น ไม่มีอะไรผิดปกติในการเพิ่มเลเบลให้กับพาร์ติชัน แต่กรณีเริ่มต้นควรใช้ UUID ต่อไดรฟ์และไม่ต่อพาร์ติชัน
Patrick Häcker

ขอบคุณ แต่ฉันสงสัยว่าฉันเป็นคนแรกจริงๆ ปัญหานี้ทำให้ฉันปวดร้าวมานานแล้ว
dummzeuch

1
หากคุณฟอร์แมตดิสก์ของคุณเป็นตารางพาร์ติชัน GUID (GPT) แทน MSDOS หรือ unix (โดยใช้ gnu parted) ไดรฟ์ของคุณจะมี uuid พาร์ติชันจะมี uuid และไดรฟ์ ext2 / 3/4 สามารถมี uuid ของตัวเอง ฉันมักจะสามารถหาไดรฟ์โดยใช้ / dev / ดิสก์ / โดย uuid และพาร์ทิชันโดย / dev / ดิสก์ / โดย partuuid
Rahly

คำตอบ:


9

คำถามเริ่มต้นของคุณมีคำตอบที่ดีอยู่แล้วดังนั้นฉันจะมุ่งเน้นไปที่พื้นหลังกับคำถามของคุณดิสก์การติดฉลาก

ฉันใช้หมายเลขซีเรียลของไดรฟ์เพื่อพิมพ์ฉลากสำหรับอ่าว hot swap - เป็นวิธีที่ดีที่สุดในการระบุไดรฟ์ที่ไม่ซ้ำกันและสม่ำเสมอ มันจะไม่เปลี่ยนแปลงไม่ว่าจะเป็นช่องไหนหรือเสียบเข้ากับคอนโทรลเลอร์ใด

คุณไม่ได้พูดถึงว่าคุณใช้ Linux หรือ Unix อื่น ๆ แต่ใน Linux คุณสามารถรับรายการดิสก์ (และพาร์ติชันที่เราต้องการแยก) กับแบรนด์รุ่นและหมายเลขซีเรียลโดยดูใน / ไดเร็กทอรี dev / disk / by-id / ฉันพบว่านามแฝงทุบตีต่อไปนี้มีประโยชน์สำหรับสิ่งนี้:

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-like" ทั้งหมดรวมถึงไดรฟ์ 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เพื่อสร้าง symlink ไปยังอุปกรณ์ของคุณ หากคุณดู/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"

สิ่งนี้คือการสร้าง symlink /dev/cdromไปยังอุปกรณ์ที่ระบุโดยที่อยู่บัส PCI คุณควรจะสามารถบรรลุสิ่งที่คุณต้องการโดยการระบุ HDD โดยใช้ (หมายเลขเบย์ขออภัยที่ไม่มีประสบการณ์) และใช้ไวยากรณ์ที่คล้ายกันกับด้านบนเพื่อเพิ่ม symlink /dev/bay1เช่น บทความเกี่ยวกับการเขียนudevกฎต่อไปนี้อาจเป็นประโยชน์:

การเขียนกฎ udev

บันทึก

ขอบคุณคำตอบของ slm โปรดทราบว่าวิธีนี้ทำให้ป้ายเฉพาะอ่าว HDD ไม่ใช่ดิสก์ภายใน ดังนั้นถ้าคุณใช้เลเบล/dev/bay1และ/dev/bay2คุณมีฮาร์ดดิสก์ A ในช่อง 1 และฮาร์ดดิสก์ B ในช่อง 2 /dev/bay1หมายถึงดิสก์ A และ/dev/bay2อ้างถึงดิสก์ B ถ้าด้วยเหตุผลบางอย่างคุณสลับดิสก์ A และ B คุณได้รับการ/dev/bay1อ้างอิงถึงดิสก์ B และ/dev/bay2อ้างถึงดิสก์ A. จากคำถามของคุณฉันเชื่อว่านี่เป็นความตั้งใจของคุณ โปรดแก้ไขฉันหากฉันผิด


1
ฉันขอแนะนำให้ใช้หมายเลขรุ่นและหมายเลขซีเรียลสำหรับการจับคู่เช่นนั้น มันยังมาพร้อมกับ caveats ที่กล่าวถึงโดย slm แต่จะให้แน่ใจว่าดิสก์ "ฉลาก" ยังคงสอดคล้องโดยไม่คำนึงถึงสิ่งที่เกิดขึ้นกับมันหรือดิสก์อื่น ๆ ในระบบ
CVn

ยังดีกว่าคือเลือก WWN ที่ไม่เหมือนใคร ดูคำตอบนี้
Tom Hale

6

คุณไม่แบ่งพาร์ติชัน e2label คุณเป็นระบบไฟล์ e2label ระบบไฟล์เหล่านั้นสามารถอยู่ในพาร์ติชั่นบนไฟล์, บนดิสก์ทั้งหมด, บนอุปกรณ์บล็อคเครือข่าย ... มันไม่สำคัญ

ดังนั้นใช่ว่ามี ext2 / 3/4 ระบบแฟ้มโดยตรงบนคุณสามารถฉลากมันก็เป็นเช่นเดียวกับคนที่จะอยู่บน/dev/sda/dev/sda1

ตอนนี้ถ้าไม่มีระบบไฟล์โดยตรง/dev/sdaแต่ตัวอย่าง/dev/sdaถูกแบ่งพาร์ติชัน (โดยใช้ GPT, MBR, LVM ... ) ลงในพาร์ติชั่นหลาย ๆ พาร์ติชั่นดังนั้นคุณจะไม่สามารถใช้งานe2label /dev/sdaได้เลย

ในการแบ่งพาร์ติชัน GPT คุณสามารถตั้งชื่อให้กับพาร์ติชันได้ดังนั้นคุณสามารถสร้างพาร์ติชันขนาดใหญ่ที่มีชื่อเพื่อช่วยระบุดิสก์ของคุณ คุณสามารถทำเช่นนั้นกับคำสั่งในcgdisk


3

หากต้องการตอบคำถามของคุณหากเป็นไปได้ที่จะติดป้ายกำกับดิสก์ซึ่งต่างจากพาร์ติชัน ฉันไม่ได้ตระหนักถึงวิธีการใด ๆ ที่จะทำเช่นนั้น

คุณสามารถใช้วิธีการที่อธิบายโดย @JosephR แต่ทราบว่าการตั้งค่านี้ขึ้นอยู่กับระบบดังนั้นหากคุณนำ HDD นั้นไปยังระบบอื่นการติดฉลาก "ที่เขาเสนอจะหายไป มันไม่ได้ผูกติดกับดิสก์ด้วยวิธีใด ๆ ที่มีความหมาย

คุณสามารถเห็นป้ายกำกับและชุด UUID ของไดรฟ์ที่แตกต่างกันโดยใช้blkidคำสั่ง

ตัวอย่าง

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

ข้อดีของการเซ็ตอัพนั้นขึ้นอยู่กับระบบ จากคำถามฉันคิดว่า OP ตระหนักดีว่า: พวกเขาต้องการติดป้าย HDD bays มากกว่าฮาร์ดไดรฟ์จริงในพวกเขา ฉันเพิ่มมันเป็นบันทึกในคำตอบของฉันในกรณี
โจเซฟอาร์

@Marco แต่blkidดูเหมือนว่าจะเพียงพาร์ทิชันรายการไม่ได้อุปกรณ์ที่ไม่ได้เป็นสิ่ง OP มีความสนใจใน.
โจเซฟอาร์

ไม่ฉันต้องการติดป้ายดิสก์ไม่ใช่อ่าวจริงๆ แต่ฉันจะพิจารณาตัวเลือกนี้
dummzeuch

มันเป็นไปได้ที่จะทำเลเบลดิสก์ตัวเองทำสิ่งนี้ใน Linux /dev/disk/by-idและคุณสามารถทำมันudev- สไตล์ดังที่แสดงในคำตอบนี้
Tom Hale

@ TomHale - คุณพลาดจุดของฉันแล้ว ป้ายกำกับนั้นไม่ได้ใช้กับตัว HDD เอง แต่จะได้รับการดูแลรักษาภายในระบบ Linux เอง หากคุณจะลบ HDD นั้นออกจากระบบฉลากจะไม่สามารถใช้งานได้กับระบบอื่น ๆ ที่จะติดตั้ง HDD มันขึ้นอยู่กับระบบดังนั้นคำแนะนำของฉันถูกต้อง โปรดย้อนกลับ 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

ในการตั้งชื่อ symlink โดยอัตโนมัติโดยใช้ค่าที่กำหนดโดย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 solution แต่นี่คือ 2 my ของฉัน

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.