Tôi có thể gắn nhãn thiết bị đĩa thay vì phân vùng không?


24

Tôi biết về chương trình e2label và bạn bè để gắn nhãn vào phân vùng đĩa, vd

e2label /dev/sda1 bla

Những gì tôi muốn làm là một cái gì đó khác biệt: Tôi muốn tạo nhãn cho ổ cứng, đó là cho / dev / sda, không phải cho một phân vùng.

Điều đó là có thể và nếu có, làm thế nào?

EDIT: Bối cảnh: Trong trường hợp có nhiều vịnh HD, tôi muốn đặt nhãn (giấy) trên cửa khoang vật lý và đặt cùng một nhãn một cách hợp lý vào đĩa tôi đã đặt ở đó.

EDIT2: Đây là về máy chủ Ubuntu Linux 12.04.

EDIT3: Trên các phân vùng GPT cũng có partlabel, có thể được đặt với ví dụ như parted. Xem /server//q/681088/76442


1
Đây là một câu hỏi tuyệt vời vì bạn là một trong những người phù hợp, người có khái niệm đúng. Mục đích chính của nhãn là xác định duy nhất một phân vùng ngay cả khi các ổ đĩa được liệt kê khác nhau sau lần khởi động lại tiếp theo. Nhưng trong khi các ổ đĩa có thể được sắp xếp lại, các phân vùng vẫn cố định trên ổ đĩa của chúng. Vì vậy, sẽ chính xác hơn khi cung cấp cho các ổ đĩa UUID / nhãn chứ không phải phân vùng. Điều này có nghĩa là, các phân vùng sẽ có tên là UUID / 1, UUID / 2, v.v. Không có gì sai khi thêm nhãn vào phân vùng, nhưng trường hợp mặc định nên sử dụng UUID cho mỗi ổ đĩa chứ không phải cho mỗi phân vùng.
Patrick Häcker

Cảm ơn, nhưng tôi nghi ngờ rằng tôi thực sự là một trong những người đầu tiên. Vấn đề này đã làm tôi khó chịu trong một thời gian dài.
dummzeuch

1
Nếu bạn định dạng đĩa của mình dưới dạng bảng phân vùng GUID (GPT) thay vì MSDOS hoặc unix, (sử dụng gnu chia tay). Ổ đĩa của bạn sẽ có một uuid, các phân vùng sẽ có một uuid và ổ đĩa ext2 / 3/4 có thể có uuid của riêng chúng. Tôi thường có thể tìm thấy các ổ đĩa bằng cách sử dụng / dev / đĩa / by-uuid và các phân vùng theo / dev / đĩa / by-partuuid
Rahly

Câu trả lời:


9

Câu hỏi ban đầu của bạn đã có một vài câu trả lời hay, vì vậy tôi sẽ tập trung vào nền cho câu hỏi của bạn, ghi nhãn đĩa.

Tôi sử dụng số sê-ri của ổ đĩa để in nhãn cho các khay trao đổi nóng - đó là cách tốt nhất để xác định duy nhất và nhất quán ổ đĩa. Nó sẽ không thay đổi bất kể vịnh nào, hoặc nó được cắm vào bộ điều khiển nào.

Bạn không đề cập đến việc bạn đang sử dụng Linux hay một số Unix khác, nhưng trong Linux, bạn có thể nhận được danh sách các đĩa (và phân vùng mà chúng tôi muốn loại trừ) với nhãn hiệu, kiểu máy và số sê-ri của chúng bằng cách tìm trong / thư mục dev / đĩa / by-id /. Tôi thấy bí danh bash sau đây hữu ích cho việc này:

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'

(phù hợp để scsi-*tìm tất cả các ổ đĩa "giống như scsi", bao gồm cả ổ đĩa SATA và SAS. trên các hệ thống chỉ có ổ đĩa SATA, ata-*cũng sẽ hoạt động tốt)

ví dụ: trên một trong các hệ thống máy chủ ZFS của tôi, nó tạo ra kết quả như thế này:

# list_disks | sắp xếp
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-YAMOR_OCZ-0974C023I4P2G1B8
sdi scsi-SATA_OCZ-YAMOR_OCZ-8RL5XW08536INH7R
sdj scsi-SATA_ST31000528AS_9VP18CCV
sdk scsi-SATA_WDC_WD10EARS-00Y_WD-WMAV50933036

Như bạn có thể thấy, danh sách / dev / đĩa / by-id bao gồm số nhãn hiệu và số kiểu của mỗi ổ đĩa, cũng như số sê-ri. Tất cả các ổ đĩa SATA đều được cắm vào cổng SATA hoặc cổng SAS trên bộ điều khiển LSI SAS-2008.

Nếu tôi có một máy in nhãn đi kèm, nó có thể dễ dàng in nhãn dựa trên đầu ra của list_disks. Tôi đã sử dụng một trình viết nhãn thủ công cũ thay vì đó là những gì tôi có. Các nhãn in chỉ chứa số sê-ri không có nhãn hiệu / kiểu máy (đủ để tôi xác định ổ đĩa khi tôi cần). Các nhãn rất tiện dụng khi một ổ đĩa bị lỗi và cần phải thay thế.


Tôi nghĩ rằng đây là giải pháp tốt nhất cho vấn đề thực tế của tôi, nhưng tôi không thể chấp nhận đây là câu trả lời vì nó không trả lời câu hỏi. Trừ khi tôi sửa đổi câu hỏi có lẽ không phải là một ý tưởng tốt. Cảm ơn.
dummzeuch

không có vấn đề gì, như bạn nói nó không trả lời trực tiếp câu hỏi. nhưng nó rất hữu ích và hy vọng người khác sẽ thấy nó hữu ích trong tương lai. btw, đây là một phiên bản cải tiến của bí danh : 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'. nó cũng tìm thấy các đĩa usb và loại bỏ dữ liệu không liên quan ở đầu ra.
cas

7

Nếu đây là Linux mà chúng ta đang nói đến, thì tôi nghĩ bạn có thể đạt được những gì bạn muốn sử dụng udevđể tạo liên kết tượng trưng cho thiết bị của mình. Nếu bạn nhìn vào /etc/udev/rules.d, có một tệp được gọi là 70-persistent-cd.rulesnội dung có các dòng như:

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

Điều này làm là nó tạo ra liên kết tượng trưng /dev/cdromđến thiết bị được xác định bởi địa chỉ bus PCI của nó. Bạn sẽ có thể thực hiện những gì bạn muốn bằng cách xác định ổ cứng bằng cách sử dụng (số vịnh? Xin lỗi không có kinh nghiệm ở đó) và sử dụng cú pháp tương tự như trên để thêm một liên kết tượng trưng /dev/bay1, chẳng hạn. Bài viết sau đây về udevcác quy tắc viết có thể hữu ích:

Viết quy tắc udev

chú thích

Nhờ câu trả lời của slm, xin lưu ý rằng giải pháp này làm cho các nhãn cụ thể cho các ổ đĩa cứng thay vì các đĩa bên trong chúng. Do đó, nếu bạn sử dụng nhãn /dev/bay1/dev/bay2bạn có đĩa cứng A trong khoang 1 và đĩa cứng B ở khoang 2, thì /dev/bay1tham chiếu đến đĩa A và /dev/bay2tham chiếu đến đĩa B. Nếu vì lý do nào đó, bạn trao đổi đĩa A và B, bạn được /dev/bay1đề cập đến đĩa B và /dev/bay2đề cập đến đĩa A. Từ câu hỏi của bạn, tôi tin rằng đây là ý định của bạn. Hãy sửa lại cho tôi nếu tôi sai.


1
Tôi sẽ khuyên bạn nên sử dụng số mô hình và số sê-ri cho kết hợp như vậy. Nó vẫn đi kèm với các cảnh báo được đề cập bởi slm, nhưng sẽ đảm bảo rằng "nhãn" đĩa vẫn nhất quán bất kể điều gì xảy ra với nó hoặc bất kỳ đĩa nào khác trong hệ thống.
một CVn

Tốt hơn vẫn là WWN độc đáo được đảm bảo. Xem câu trả lời này .
Tom Hale

6

Bạn không phân vùng e2label, bạn hệ thống tệp e2label. Các hệ thống tệp đó có thể nằm trên các phân vùng trên tệp, trên toàn bộ đĩa, trên các thiết bị khối mạng ... không thành vấn đề.

Vì vậy, có, nếu có một hệ thống tập tin ext2 / 3/4 trực tiếp trên /dev/sda, bạn có thể gắn nhãn nó giống như một hệ thống sẽ được bật /dev/sda1.

Bây giờ, nếu không có hệ thống tập tin trực tiếp /dev/sdanhưng chẳng hạn, /dev/sdađược phân vùng (sử dụng GPT, MBR, LVM ...) thành nhiều phân vùng, thì rõ ràng là không có bạn không thể sử dụng e2label /dev/sda.

Trong phân vùng GPT, bạn có thể đặt tên cho các phân vùng, do đó bạn có thể tạo một phân vùng lớn có một tên với tên để giúp xác định đĩa của bạn. Bạn có thể làm điều đó với clệnh trong gdisk.


3

Để trả lời câu hỏi của bạn nếu có thể gắn nhãn đĩa trái ngược với phân vùng, câu trả lời là không. Tôi không biết về bất kỳ phương pháp nào để làm như vậy.

Bạn có thể sử dụng phương pháp được @JosephR vạch ra, nhưng nhận ra rằng thiết lập này phụ thuộc vào hệ thống, vì vậy nếu bạn đưa ổ cứng đó sang hệ thống khác, "ghi nhãn" mà anh ấy đề xuất sẽ bị mất. Nó không được gắn vào đĩa theo bất kỳ cách có ý nghĩa.

Ngẫu nhiên, bạn có thể thấy các nhãn và bộ UUID cho các ổ đĩa khác nhau bằng cách sử dụng blkidlệnh.

Thí dụ

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

Điểm tốt về việc thiết lập phụ thuộc vào hệ thống. Từ câu hỏi, tôi nghĩ OP nhận thức được điều đó: họ muốn gắn nhãn cho các ổ cứng hơn là các ổ cứng thực sự bên trong chúng. Tôi đang thêm nó như một ghi chú cho câu trả lời của tôi chỉ trong trường hợp.
Joseph R.

@Marco Nhưng blkiddường như chỉ liệt kê các phân vùng không phải thiết bị, đó không phải là điều OP quan tâm.
Joseph R.

Không, tôi thực sự muốn gắn nhãn các đĩa, không phải các vịnh. Nhưng tôi sẽ xem xét tùy chọn này.
dummzeuch

Đó khả năng ghi nhãn đĩa, Linux tự thực hiện điều này trong /dev/disk/by-idvà bạn có thể làm điều đó udevkiểu như trong câu trả lời này .
Tom Hale

@TomHale - bạn đang thiếu quan điểm của tôi. Nhãn đó không được áp dụng cho chính ổ cứng, mà được duy trì trong chính hệ thống Linux. Nếu bạn đã loại bỏ ổ cứng đó khỏi hệ thống, nhãn không còn khả dụng trên các hệ thống khác mà ổ cứng sẽ được gắn vào. Nó phụ thuộc vào hệ thống, do đó lời khuyên của tôi là chính xác. Vui lòng đảo ngược DV của bạn.
slm

3

Tôi giả định rằng mục tiêu chính của bạn là xác định rõ ràng một đĩa vật lý. Thật không may, tôi không tin rằng có một cách tiêu chuẩn để gắn nhãn cho đĩa giống như cách bạn có thể gắn nhãn cho hệ thống tệp.

Một cách là sử dụng mô hình và số sê-ri của đĩa. Trong Linux, bạn có thể truy xuất các định danh đó với hdparm -i /dev/sdX. Điều thú vị về số sê-ri là nó có thể đã được in trên nhãn dán của nhà sản xuất. (Tôi cho rằng bạn chủ yếu quan tâm đến Linux vì bạn đã đề cập e2labeltrong câu hỏi của mình. Nếu vậy, vui lòng chỉnh sửa câu hỏi của bạn và thêm thẻ .)

Nếu bạn đang sử dụng bộ điều khiển RAID phần cứng, hdparmcó thể không phù hợp với bạn, trong trường hợp đó bạn sẽ phải tham khảo các công cụ dòng lệnh của bộ điều khiển RAID thay thế.

Nếu bạn muốn xác định nó bằng một cái gì đó trong nội dung của đĩa, bạn có thể sử dụng đĩa GUID, được lưu trữ trong tiêu đề bảng phân vùng GPT ( byte 56-71 của LBA 1 ). Đó là một chuỗi ngẫu nhiên tùy ý chứ không phải là nhãn bạn chọn, nhưng nó giống như một nhãn ở chỗ nó tồn tại cho đến khi bạn quyết định ghi đè bảng phân vùng. Trong Linux, bạn có thể thấy đĩa GUID bằng cách sử dụng gdisk -l /dev/sdX.


1

Dựa trên các câu trả lời tôi nhận được (Cảm ơn các bạn!) Dường như không có cách nào để thực sự gắn nhãn đĩa mà chỉ phân vùng. Vì vậy, câu trả lời có lẽ là "KHÔNG".

Tôi sẽ đi với các đề xuất được đề xuất bởi @cas và @ 200_success: Tôi sẽ dán số sê-ri của đĩa với nhãn dán vào cửa vịnh.

Tạo một phân vùng nhỏ trên mỗi đĩa chỉ để có thể gắn nhãn phân vùng này (như được đề xuất bởi @Stephane Chazelas) cũng là một tùy chọn, nhưng tôi nghĩ rằng sẽ quá khó hiểu cho những người khác có thể phải bảo trì hệ thống sau đó .


1

Tạo udevquy tắc bằng WWN duy nhất được bảo đảm của đĩa (nếu có), nếu không sử dụng ID nhà cung cấp và ID nối tiếp:

  1. Lấy các giá trị cần thiết:

    udevadm info -q all /dev/<YOUR-DEVICE-HERE> | egrep "(WWN|SERIAL|VENDOR_ID)="
    
  2. Massage các giá trị này udev rulesnhư:

    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

Để tự động đặt tên cho liên kết tượng trưng bằng các giá trị được cung cấp bởi udevadm info -q all /dev/<YOUR-DEVICE>, bạn có thể sử dụng:

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

Cũng có thể tạo ENVcác biến từ ATTRScác giá trị để có thể nhận được một ID duy nhất ngắn hơn.


0

Nếu bạn ls /dev/disk-by-path/pci*...

Bạn chắc chắn sẽ thấy một đường dẫn PCI cho mỗi khoang ổ đĩa. Bạn chỉ cần sử dụng 1 đĩa đã biết để đảm bảo bạn nhận được đúng nhãn.

Sử dụng blkid /dev/disk-by-path/pci*để xem phân vùng đĩa nào trên đường dẫn PCI.

Bạn có thể gắn kết bằng cách sử dụng đường dẫn đó quá.


0

Tôi thích giải pháp @cas, nhưng đây là 2 của tôi

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

Đĩa đã được dán nhãn là sda, sdb, sdc... Các phân vùng này sau đó được dán nhãn ví dụ trên sda: sda1, sda2...

Bạn có thể liệt kê tất cả các nhãn cho đĩa và phân vùng với ls /dev/sd*


4
Thật không may, các tên thiết bị này thay đổi nếu tôi di chuyển đĩa từ máy tính này sang máy tính khác hoặc từ bộ điều khiển này sang bộ điều khiển khác.
dummzeuch
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.