Jika saya tahu simpul indeks (inode) dari suatu file, tetapi saya tidak tahu path-nya (atau path-nya), apakah mungkin membuat tautan langsung ke inode itu secara langsung?
Saya dapat menemukan file menggunakan sudo find / -inum 123546
dan kemudian membuat hardlink, tetapi itu akan terlalu lambat untuk aplikasi saya.
NB Saya menggunakan sistem file ext4.
Jawaban:
AFAIK, tidak dengan API kernel. Jika antarmuka seperti itu ada, itu harus dibatasi untuk pengguna-super karena jika tidak akan membiarkan siapa pun mengakses file dalam direktori yang tidak memiliki akses pencarian.
Tetapi Anda dapat menggunakan
debugfs
pada sistem file (setelah itu dilepas) untuk melakukannya (dengan asumsi Anda memiliki akses tulis ke perangkat blok).(ganti
/dev/block/device
dengan perangkat blok aktual tempat sistem file berada).Kemudian, saat diminta
(dengan kurung sudut, mengganti 123 dengan nomor inode yang sebenarnya) untuk memeriksa apakah file tersebut ada (inode memiliki jumlah tautan lebih besar dari 0) dan bukan direktori.debugfs
, masukkanJika semuanya baik, masukkan:
untuk membuat hardlink (perhatikan bahwa path relatif terhadap root dari sistem file). Diikuti oleh: untuk menambah jumlah tautan (tekan Enteruntuk semua bidang kecuali jumlah tautan di mana Anda ingin menambahkan 1 ke nilai saat ini).sumber
Bergantung pada kasus penggunaan Anda, pendekatan lain mungkin untuk pertama mengumpulkan semua kandidat file dalam satu direktori dengan menautkannya dengan keras dan kemudian menautkan file yang Anda sangat tertarik.
Seperti
(dengan asumsi nomor inode Anda semuanya kurang dari 1.000.000, buat lebih banyak direktori jika perlu).
Setelah itu, inode Anda dikelompokkan 1000-bijaksana dan dikumpulkan di
by-inode/
pohon. Dari sana, Anda dapat menautkannya sesuai kebutuhan.Perhatikan bahwa itu berarti menghapus file di bawah
<path>
tidak akan mendapatkan kembali ruang karena tautan ekstra keras itu.sumber