it-swarm-vi.com

Làm cách nào để tìm thư mục trên thiết bị vật lý?

Cụ thể: Tôi đã làm Sudo mkdir /work, và muốn xác minh nó thực sự nằm trên ổ cứng của tôi và không được ánh xạ tới một số ổ đĩa khác.

Làm cách nào để kiểm tra vị trí của thư mục này?

120
ripper234

Lệnh df(1) sẽ cho bạn biết thiết bị có tệp hoặc thư mục đang bật:

df /work

Trường đầu tiên có thiết bị mà tập tin hoặc thư mục được bật.

ví dụ.

$ df /root
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1              1043289    194300    795977  20% /

Nếu thiết bị là âm lượng hợp lý, bạn sẽ cần xác định (các) thiết bị khối nào được bật. Đối với điều này, bạn có thể sử dụng lệnh lvs(8):

# df /usr
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/orthanc-usr
                       8256952   4578000   3259524  59% /usr
# lvs -o +devices /dev/mapper/orthanc-usr
  LV   VG      Attr   LSize Origin Snap%  Move Log Copy%  Convert Devices     
  usr  orthanc -wi-ao 8.00g                                       /dev/sda3(0)

Cột cuối cùng cho bạn biết rằng khối lượng logic usr trong nhóm âm lượng orthanc (/dev/mapper/orthanc-usr) Trên thiết bị /dev/sda3. Vì một nhóm âm lượng có thể kéo dài nhiều âm lượng vật lý, bạn có thể thấy rằng bạn có nhiều thiết bị được liệt kê.

Một loại thiết bị khối logic khác là thiết bị md (Nhiều thiết bị và được gọi là thiết bị siêu đĩa tôi nghĩ), chẳng hạn như /dev/md2. Để xem các thành phần của thiết bị md, bạn có thể sử dụng mdadm --detail Hoặc xem trong /proc/mdstat

# df /srv
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/md2             956626436 199340344 757286092  21% /srv
# mdadm --detail /dev/md2
...details elided...
    Number   Major   Minor   RaidDevice State
       0       8        3        0      active sync   /dev/sda3
       1       8       19        1      active sync   /dev/sdb3

Bạn có thể thấy rằng /dev/md2 Có trên các thiết bị /dev/sda3/dev/sdb3.

Có các phương pháp khác mà các thiết bị khối có thể được lồng vào nhau (Fuse, loopback systemystems) sẽ có các phương thức riêng để xác định thiết bị khối bên dưới và thậm chí bạn có thể lồng nhiều lớp để bạn phải làm việc theo cách của mình. Bạn sẽ phải nhận từng trường hợp như nó đến.

154
camh

Đối với một tập lệnh, bạn có thể sử dụng:

$ df -P <pathname> | awk 'END{print $1}'

Đây là tương thích POSIX.

5
Tom Hale

Trong các bản phân phối hiện đại của Ubuntu, có một lớp bổ sung (trình ánh xạ thiết bị) giữa tệp/thư mục của bạn và thiết bị. /dev/mapper chứa các liên kết tượng trưng chỉ đến các thiết bị đặc biệt thực tế. Ví dụ: thử thư mục hiện tại:

$ df . | grep '^/' | cut -d' ' -f1
/dev/mapper/kubuntu--vg-root

$ ls -l /dev/mapper/kubuntu--vg-root
lrwxrwxrwx 1 root root 7 Nov 22 18:02 /dev/mapper/kubuntu--vg-root -> ../dm-1

Vì vậy, để có được đường dẫn đầy đủ của thiết bị theo chương trình, bạn có thể sử dụng:

$ realpath $(df . | grep '^/' | cut -d' ' -f1)

Đó là trường hợp của tôi in:

/dev/dm-1

realpath là một phần của GNU coreutils.

2
arielf