Làm thế nào để có được danh sách đầy đủ và chính xác các hệ thống tập tin được gắn trong Linux?


150

Tôi thường sử dụng mountđể kiểm tra các hệ thống tập tin được gắn kết. Tôi cũng biết có một số kết nối giữa mount/etc/mtabnhưng tôi không chắc chắn về các chi tiết. Sau khi đọc Làm thế nào để kiểm tra nếu / Proc / được gắn kết, tôi càng bối rối hơn.

Câu hỏi của tôi là: Làm thế nào để có được danh sách chính xác nhất của các hệ thống tập tin được gắn kết? Tôi chỉ nên sử dụng mount, hoặc đọc nội dung /etc/mtab, hoặc nội dung của /proc/mounts? Điều gì sẽ cho kết quả đáng tin cậy nhất?


3
Bạn cũng nên đọc câu trả lời được chấp nhận cho câu hỏi này: unix.stackexchange.com/questions/12040/iêu
nozimica

Tôi không thể giúp liên kết với / etc / mtab trong Linux là gì? bởi vì nó bao gồm các chi tiết không phải của Linux mà không có câu trả lời nào ở đây đưa ra.
Weijun Zhou

Câu trả lời:


141

Danh sách dứt khoát của các hệ thống tập tin gắn kết là trong /proc/mounts.

Nếu bạn có bất kỳ hình thức chứa nào trên hệ thống của mình, /proc/mountschỉ liệt kê các hệ thống tệp trong vùng chứa hiện tại của bạn. Ví dụ, trong một chroot , /proc/mountschỉ liệt kê các hệ thống tập tin có điểm gắn kết nằm trong chroot. ( Có nhiều cách để thoát khỏi chroot, tâm trí. )

Ngoài ra còn có một danh sách các phân vùng được gắn trong /etc/mtab. Danh sách này được duy trì bởi các lệnh mountumount. Điều đó có nghĩa là nếu bạn không sử dụng các lệnh này (khá hiếm), hành động của bạn (gắn kết hoặc ngắt kết nối) sẽ không được ghi lại. Trong thực tế, chủ yếu là trong một chroot mà bạn sẽ tìm thấy /etc/mtabcác tệp khác với trạng thái của hệ thống. Ngoài ra, gắn kết được thực hiện trong chroot sẽ được phản ánh trong chroot /etc/mtabnhưng không phải trong chính /etc/mtab. Các hành động được thực hiện trong khi /etc/mtabtrên một hệ thống tệp chỉ đọc cũng không được ghi lại ở đó.

Lý do tại sao đôi khi bạn muốn tham khảo ý kiến /etc/mtabưu tiên hoặc thêm vào /proc/mountsđó là vì nó có quyền truy cập vào dòng lệnh mount, đôi khi nó có thể trình bày thông tin theo cách dễ hiểu hơn; ví dụ: bạn thấy các tùy chọn gắn kết như được yêu cầu (trong khi cũng /proc/mountsliệt kê các mountmặc định và kernel) và các liên kết gắn kết xuất hiện như vậy trong /etc/mtab.


1
Điểm mountduy trì /etc/mtabnếu nó không thể dựa vào là gì? Sẽ không tốt hơn nếu mountđược trình bày thông tin từ /proc/mountsthay thế?
Piotr Dobrogost

2
@PiotrDobrogost /etc/mtabcó thể ghi lại thông tin mà kernel không theo dõi, chẳng hạn như các tùy chọn được yêu cầu ban đầu và các liên kết gắn kết xuất hiện như vậy thay vì xuất hiện dưới dạng các mục trùng lặp cho thiết bị. Tuy nhiên, nhiều bản phân phối đang hướng tới việc tạo /etc/mtabmột liên kết tượng trưng đến /proc/mounts.
Gilles

3
Tuy nhiên, nhiều bản phân phối đang hướng tới việc tạo /etc/mtabmột liên kết tượng trưng đến /proc/mounts. Thật tốt khi nghe - thêm thông tin này để trả lời sẽ làm cho nó thậm chí còn tốt hơn. Bạn có nghĩ rằng việc theo dõi các tùy chọn được yêu cầu bởi kernel sẽ khả thi và có lợi không?
Piotr Dobrogost

2
Lưu ý rằng bạn sẽ cần bỏ thoát nội dung của / Proc / mount. Như được mô tả trên trang getmntent (3), không gian (\ 040), tab (\ 011), dòng mới (\ 012) và dấu gạch chéo ngược (\ 134) cần được xử lý đặc biệt. Đặc biệt nếu gắn kết người dùng được bật, bạn sẽ cần phải rất cẩn thận khi làm việc với các đường dẫn này.
Eric

2
Ngoài ra, vui lòng xem câu trả lời khác để sử dụng lệnh findmntlà cách ưa thích kể từ năm 2010 và có thể là cách an toàn duy nhất trong tương lai gần khi không gian tên gắn kết sẽ phổ biến.
Marki555

68

Kể từ câu 2.18 (tháng 7 năm 2010) util-linux bao gồm một công cụ cho phép bạn hiển thị danh sách các hệ thống tệp hiện được gắn:

findmnt

Bạn có thể chuyển từ chế độ xem dạng cây mặc định sang chế độ xem danh sách -l, xác định các cột đầu ra với -o(tương tự lsblk), lọc kết quả dựa trên loại hệ thống tệp với -tvv ...

findmnt -lo nguồn, đích, fstype, nhãn, tùy chọn, đã sử dụng -t ext4
SOURCE    TARGET      FSTYPE LABEL OPTIONS                           USED
/dev/sda1 /           ext4   ARCH  rw,noatime,discard,data=ordered  17.6G
/dev/sdb2 /media/DATA ext4   DATA  rw,noatime,discard,data=ordered    44M

Để biết thêm chi tiết, hãy đọc mantrang (và findmnt --helpđể có danh sách các cột có sẵn)


33

Có lẽ bởi vì đã 5 năm kể từ khi câu hỏi này được trả lời, mọi thứ đã thay đổi. Việc cat /proc/mountstạo ra rất nhiều thông tin mà bạn không quan tâm. Hôm nay, IMHO, tôi thấy đây là giải pháp tối ưu.

df -h --output=source,target

Khi bạn đọc các trang hướng dẫn, có tất cả các loại tùy chọn bạn có thể làm nhưng đây là những gì bạn làm. Ví dụ: để dọn sạch các kết quả thậm chí nhiều hơn, bạn có thể loại trừ các loại tệp "tmpfs" bằng lệnh này:

df -hx tmpfs --output=source,target

df hoạt động ở cấp độ hệ thống tập tin chứ không phải cấp độ tập tin.

Các lệnh trên cũng sẽ bao gồm các kết nối mạng.

Để xem thêm một chút thông tin sử dụng này:

df -hT

LƯU Ý Với các kết nối mạng được gắn chậm, việc này có thể mất vài phút!

Nếu bạn không có hoặc quan tâm đến các kết nối mạng được gắn kết (và bạn có quyền root) thì điều này thậm chí còn tốt hơn:

sudo lsblk -f

Bạn không cần phải root nhưng một số trường / cột (chẳng hạn như Nhãn) sẽ có dữ liệu null, điều này có thể vẫn ổn khi các câu hỏi muốn biết hệ thống tập tin nào được gắn kết.
Rick

Ubuntu. Tuy nhiên tôi mới phát hiện ra "findmnt" không sử dụng root và nó liệt kê các hệ thống tập tin gắn trên mạng. Tôi đã suy nghĩ về việc chỉnh sửa câu trả lời của tôi để bao gồm kiến ​​thức đó.
Rick

:-) Tôi mệt mỏi khi trả lời câu trả lời của bạn nhưng không thể cho đến khi tôi có đại diện từ 15+ trở lên
Rick

1
Btw, nếu bạn đang cố gắng sử dụng --outputvới thứ gì đó như Ubuntu 12 không chấp nhận các tùy chọn đó, hãy xem findmntcâu trả lời của don_crissti's dưới đây.
Mat Schaffer

findmntdường như cần các khả năng cao hơn (được thử nghiệm với root; root có tất cả các khả năng) để hiển thị nhãn.
ctrl-alt-delor

23

Hầu hết thời gian, mountlà phương pháp thuận tiện nhất. Để có danh sách đầy đủ và chính xác các hệ thống tệp hiện được gắn, bạn nên đọc nội dung của /proc/mounts(ví dụ: với cat /proc/mounts).

Ví dụ: nếu việc gắn /readwrite không thành công và sau đó nó được gắn chỉ đọc như một dự phòng, /etc/mtab( mountlệnh này đọc từ đó để cho bạn biết những gì được gắn kết và ghi vào - nếu có thể - khi nó thay đổi những gì được gắn kết) sẽ không được cập nhật để phản ánh rằng /(có chứa /etc/mtab) hiện đang được gắn kết chỉ đọc. Trong tình huống này, việc chạy mountthường sẽ cho bạn biết (không chính xác) /đã được gắn readwrite.

Trong điều kiện bình thường (nghĩa là khi hệ thống tệp có chứa nó có thể được ghi vào), /etc/mtabchứa một danh sách các hệ thống tệp hiện được gắn. Điều này không có gì khó hiểu /etc/fstab, trong đó có một danh sách các hệ thống tập tin được cho là sẽ tự động được gắn kết khi hệ thống khởi động.

Tất nhiên, nếu /prochệ thống tệp ảo tự nó không được gắn kết, thì bạn không thể đọc bất kỳ tệp ảo nào trong đó, bao gồm /proc/mounts. Điều này rất hiếm khi là trường hợp. Trong tình huống này, mountcó lẽ là lựa chọn tốt nhất của bạn để xem những gì được gắn kết.

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.