Làm thế nào để tạo một liên kết cứng đến một nút (ext4)?


17

Nếu tôi biết nút chỉ mục (inode) của một tệp, nhưng tôi không biết đường dẫn của nó (hoặc bất kỳ đường dẫn nào của nó), có thể tạo liên kết cứng đến nút đó trực tiếp không?

Tôi có thể tìm thấy tệp bằng cách sử dụng sudo find / -inum 123546và sau đó tạo một liên kết cứng, nhưng điều đó sẽ quá chậm đối với ứng dụng của tôi.

NB Tôi đang sử dụng một hệ thống tập tin ext4.


1
Liên quan chặt chẽ: loại bỏ hoặc đổi tên một tệp thông qua inode của nó (cả hai đều không thể thực hiện trực tiếp như nhau).
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


23

AFAIK, không phải với API kernel. Nếu một giao diện như vậy tồn tại, nó sẽ phải được giới hạn cho siêu người dùng vì nếu không, điều đó sẽ cho phép bất cứ ai truy cập các tệp trong thư mục mà họ không có quyền truy cập tìm kiếm.

Nhưng bạn có thể sử dụng debugfstrên hệ thống tệp (một khi chưa được kết nối) để làm điều đó (giả sử bạn có quyền truy cập ghi vào thiết bị khối).

gỡ lỗi -w / dev / block / thiết bị

(thay thế /dev/block/devicebằng thiết bị khối thực tế mà hệ thống tệp nằm trong).

Sau đó, tại dấu nhắc của debugfs, nhập

thống kê < 123 >
(với dấu ngoặc nhọn, thay thế 123 bằng số inode thực tế) để kiểm tra xem tệp có tồn tại không (inode có số lượng liên kết lớn hơn 0) và không phải là một thư mục.

Nếu tất cả đều tốt, hãy nhập:

ln < 123 > đường dẫn / đến / newfile
để tạo liên kết cứng (lưu ý rằng đường dẫn có liên quan đến thư mục gốc của hệ thống tệp). Theo dõi bởi:

mi < 123 >
để tăng số lượng liên kết (nhấn Entercho tất cả các trường ngoại trừ số lượng liên kết nơi bạn muốn thêm 1 vào giá trị hiện tại).


6
Một giao diện như vậy cũng sẽ phải kiểm tra xem tệp có số lượng liên kết khác không, nếu không, có thể phục hồi tệp đã bị xóa nhưng vẫn mở, IIRC đã bị từ chối vì vi phạm bất biến nhân.
Gilles 'SO- ngừng trở nên xấu xa'


1
@PhilipCouling, bit quyền thực thi trên một thư mục dịch thành quyền tìm kiếm . Tôi đã nói trong các thư mục sau đó không có quyền truy cập tìm kiếm .
Stéphane Chazelas

3
@OrangeDog, quyền tìm kiếm là thuật ngữ được sử dụng bởi tiêu chuẩn POSIX.
Stéphane Chazelas

1
@mosvy: Kiểm tra đó có thể được gỡ bỏ khỏi kernel. Bạn phải vá một vài vị trí trong VFS để nó không tự vòi. Tôi đã làm điều đó trong khi làm luận án của tôi nhiều năm trước.
Joshua

3

Tùy thuộc vào trường hợp sử dụng của bạn, trước tiên, một cách tiếp cận khác có thể là thu thập tất cả các ứng cử viên tệp trong một thư mục bằng cách liên kết cứng và sau đó liên kết cứng các tệp bạn đặc biệt quan tâm.

Nhu la

mkdir -pm 0700 by-inode/{0..999}
find <path> ! -type d -printf "%i/%p\0" |
  while IFS=/ read -rd '' i n; do
    ln "$n" "by-inode/$((i/1000))/$i"
  done

(giả sử số inode của bạn đều dưới 1.000.000, hãy tạo thêm thư mục nếu cần).

Sau đó, các nút của bạn được nhóm 1000-khôn ngoan và được thu thập trong by-inode/cây. Từ đó, bạn có thể liên kết chúng khi cần thiết.

Lưu ý rằng điều đó có nghĩa là xóa các tệp bên dưới <path>sẽ không lấy lại dung lượng do liên kết cứng thêm đó.

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.