Số sê-ri ổ cứng Linux là không root


15

Trước hết, tôi muốn xin lỗi vì tiêu đề không bao gồm chi tiết phần cứng. Điều này là do tôi đang tìm kiếm một lệnh sẽ hoạt động trong tất cả các bản phân phối Linux.

Câu hỏi:

Tôi rất mới với Linux và không biết nhiều, tuy nhiên, có thể truy xuất số sê-ri ổ cứng chạy dưới dạng không root. Tôi biết có các lệnh có sẵn để lấy thông tin này đang chạy bằng sudo. Tuy nhiên, tôi cần một cách để lấy thông tin này mà không cần chạy như sudo.

Chúng tôi rất trân trọng ý kiến ​​đóng góp của bạn.

Trân trọng,

Mù tạt

Câu trả lời:


19

Trên hầu hết các bản phân phối hiện tại, số sê-ri ổ cứng được lưu trữ trong cơ sở dữ liệu udev, có thể được truy vấn mà không có quyền root:

/sbin/udevadm info --query=property --name=sda

(tìm kiếm ID_SERIAL, ID_SERIAL_SHORTcũng có các /dev/disk/by-id/ata-*liên kết tượng trưng cho các ổ ATA dựa trên các giá trị đó).

udiskscung cấp giao diện cấp cao hơn cho những dữ liệu đó và hơn thế nữa (nó cũng cung cấp quyền truy cập vào các thuộc tính SMART mà không yêu cầu quyền root, cần thiết để gọi, ví dụ, smartctltrực tiếp).


Bạn đã đúng, chỉ cần thử udisks --show-info.__ Nhưng _ phải lưu ý rằng khi được sử dụng ở chế độ hàng loạt hoặc nói chung trong các tập lệnh, udisksthì CÁCH chậm hơn udevadm.
cú pháp

6

Một cách khác thường làm việc là:

ls -l /dev/disk/by-id/

Đây là một lớp lót cung cấp cho bạn một bảng liệt kê nhanh về ổ đĩa và số kiểu / số sê-ri:

ls -l /dev/disk/by-id/ | grep scsi- | grep -v part | awk '{print $NF " " $(NF-2)}' | sed 's|../../||g' | sed 's/scsi-...._//g'  

Hoặc cho các máy từ xa:

ssh $host "ls -l /dev/disk/by-id/ | grep scsi- | grep -v part | awk '{print \$NF \" \" \$(NF-2)}' | sed 's|../../||g' | sed 's/scsi-...._//g'"

Sau đó bạn có thể tiếp tục xử lý đầu ra này. Đối với hầu hết các loại ổ đĩa, chuỗi thứ hai trên mỗi dòng là MODEL_SERIAL.


2

Giống như womble đã nói, không có quyền truy cập root hoặc cấp quyền giống như root cho một số quy trình, bạn không thể đạt được điều này. Tuy nhiên, vì bạn nói bạn là người mới, hãy để tôi lưu ý bạn về một lệnh tiện dụng được gọi lshw.


Cảm ơn cả Womble và chính bạn, rất cảm kích. Tôi sẽ điều tra lệnh bạn đã đề cập.

1

Thiếu việc cấp quyền giống như root cho một số quy trình, bạn không thể đạt được điều này. Ngay cả khi root, bạn không thể làm điều đó trên một số cấu hình phần cứng.


Cảm ơn bạn đã phản ứng nhanh chóng Womble. Tôi sẽ cho nó đi.
mustafa

0

Các liên kết dưới / dev / đĩa / by-id được tạo bởi udev. Trong /etc/udev/rules.d/50-udev.rules những dòng như vậy có thể được tìm thấy:

KERNEL=="sd*[!0-9]|sr*", SYSFS{ieee1394_id}=="*", ENV{ID_SERIAL}="$sysfs{ieee1394_id}", ENV{ID_BUS}="ieee1394"
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}=="", IMPORT{program}="/lib/udev/usb_id -x"
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}=="", IMPORT{program}="/lib/udev/scsi_id -g -x -s %p -d $tempnode"
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}=="", IMPORT{program}="/lib/udev/scsi_id -g -x -a -s %p -d $tempnode"
KERNEL=="nst[0-9]*|st*|sd*[!0-9]|sr*|dasd*[!0-9]|cciss?c", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"

Thật không may, nó không phải là tầm thường để tìm ra by-idsymlink này từ tên của thiết bị. Nhưng có ít nhất một cách trực tiếp:

$ udevinfo -q path -n /dev/sda
/block/sda
$ udevinfo -q symlink -p /block/sda
disk/by-id/scsi-SATA_KINGSTON_SVP100_31JY100MY5SK disk/by-path/pci-0000:00:11.0-scsi-0:0:0:0

Một danh sách ngăn cách không gian được trả lại. Vì vậy, by-idcon đường có thể được tìm thấy.

Hoặc Bạn có thể trực tiếp lấy số sê-ri "tổng hợp":

$ udevinfo -q env -p /block/sda
ID_VENDOR=ATA
ID_MODEL=KINGSTON_SVP100S
ID_REVISION=CJR1
ID_SERIAL=SATA_KINGSTON_SVP100_31JY100MY5SK
ID_TYPE=disk
ID_BUS=scsi
ID_PATH=pci-0000:00:11.0-scsi-0:0:0:0

ID_SERIALsau dấu gạch dưới cuối cùng, bạn có thể nhận được số sê-ri.

Như tôi thấy một số sê-ri có thể chứa các ký tự chữ và số và '-' (Tôi có các ổ cứng SCSI như vậy). Có ai biết bất kỳ giới hạn về số sê-ri? Nếu nó có thể chứa '_' thì phương thức này không phải là bằng chứng.

Các ID_MODELchủ chốt có thể được sử dụng để định vị chính xác hơn đầu số sê-ri, như (có vẻ như với tôi) 15 ký tự đầu tiên của nó được thêm vào ID_SERIAL(số lượng có thay thế bằng '_').


"Udevinfo" không hoạt động với tôi ở đây trên Ubuntu. Tuy nhiên, lớp lót sau đây đã làm đúng những gì tôi muốn: udevadm info -q property -xn sda | awk -F\' '/ID_SERIAL_SHORT/{print $2}'Tất nhiên, -q propertycó thể bỏ đi, nhưng tôi luôn nghĩ rằng thật lãng phí tài nguyên để cho udevadmra những dòng bổ sung mà chúng ta không cần.
cú pháp
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.