Tại sao tôi không thể tạo liên kết cứng từ tệp thiết bị trong thư mục khác / dev?


11

Khi tôi muốn tạo một liên kết cứng trong /homethư mục của mình ở chế độ root , Linux đã hiển thị thông báo lỗi sau:

ln: failed to create hard link ‘my_sdb’ => ‘/dev/sda1’: Invalid cross-device link

Thông báo lỗi trên được hiển thị dưới đây:

# cd /home/user/
# ln /dev/sda1 my_sdb

Nhưng tôi chỉ có thể tạo một liên kết cứng trong /devthư mục, và nó không thể có trong các thư mục khác.

Bây giờ, tôi muốn biết làm thế nào để tạo một liên kết cứng từ một tệp thiết bị hiện có (như sdb1) trong /homethư mục (hoặc các thư mục khác)?

Câu trả lời:


21

Nhưng tôi chỉ có thể tạo một liên kết cứng trong thư mục / dev và nó không thể có trong các thư mục khác.

Như được hiển thị bởi thông báo lỗi, không thể tạo liên kết cứng trên các hệ thống tệp khác nhau; bạn chỉ có thể tạo các liên kết mềm (tượng trưng).

Chẳng hạn, nếu bạn /homeở trong một phân vùng khác với phân vùng gốc, bạn sẽ không thể liên kết cứng /tmp/footới /home/user/.

Bây giờ, như @RichardNeumann đã chỉ ra, /devthường được gắn dưới dạng hệ thống tập tin devtmpfs. Xem ví dụ này:

[dr01@centos7 ~]$ df
Filesystem                      1K-blocks    Used Available Use% Mounted on
/dev/mapper/centos_centos7-root  46110724 3792836  42317888   9% /
devtmpfs                          4063180       0   4063180   0% /dev
tmpfs                             4078924       0   4078924   0% /dev/shm
tmpfs                             4078924    9148   4069776   1% /run
tmpfs                             4078924       0   4078924   0% /sys/fs/cgroup
/dev/sda1                         1038336  202684    835652  20% /boot
tmpfs                              815788      28    815760   1% /run/user/1000

Do đó, bạn chỉ có thể tạo liên kết cứng đến các tệp /devtrong /dev.


3
Phân vùng không phải là vấn đề. Đó là, như bạn đã nêu giới hạn hệ thống tập tin chéo. /devthường được gắn kết như một devtmpfshệ thống tập tin. Vì vậy, bạn chỉ có thể tạo liên kết cứng đến các tập tin /devtrong /dev. Bạn ví dụ thậm chí không thể tạo liên kết cứng vào /dev/nullbên trong /dev/pts, bởi vì nó được gắn với devptsnhư một hệ thống tệp khác.
Richard Neumann

1
@RichardNeumann Điểm tốt. Tôi đã sửa câu trả lời của mình mà chỉ đúng một phần.
dr01

11

Một liên kết cứng không thể được sử dụng để đạt được những gì bạn muốn, bởi vì các liên kết cứng không hoạt động giữa các hệ thống tệp.

Tuy nhiên, bạn có thể đạt được những gì bạn muốn với mknodlệnh.

  1. Chạy đi ls -l /dev/devicefile. Bạn sẽ thấy một đầu ra như thế này:

    crw-rw-rw- 1 root root 1, 9 Mar 29 15:46 /dev/urandom
    
  2. Lưu ý số trong cột kích thước ( 1, 9).
  3. Chạy lệnh mknod /path/to/destination c 1 9(thay thế các giá trị bạn muốn).

Tại sao điều này làm việc?

Các tệp thiết bị là các liên kết cứng thực sự đến một tệp trừu tượng được thực hiện bởi trình điều khiển kernel hoặc kernel. Trong khi bạn không thể tạo các liên kết cứng đến các đối tượng hệ thống tệp từ một hệ thống tệp khác, thì chúng không phải là các đối tượng hệ thống tệp và do đó, bằng cách biết các số tham chiếu chính và phụ của chúng, bạn có thể tạo một tham chiếu đến chúng từ bất kỳ hệ thống tệp nào.



2

Liên kết cứng chỉ cần tạo một mục khác trong một thư mục, trỏ đến một tệp (trong đó tệp là một tệp giống như một thứ, chẳng hạn như một thư mục). Do đó, các liên kết cứng không thể tham chiếu một tệp trong hệ thống tệp khác.

Liên kết mềm là bạn của bạn trong trường hợp này. Sử dụng ln -s. Liên kết mềm có thể đi qua các hệ thống tập tin và thậm chí có thể chỉ ra một cái gì đó không có ở đó.

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.