Mengapa tautan keras hanya valid dalam sistem file yang sama?

22

Saya membaca pengantar ini ke baris perintah oleh Mark Bates.

Dalam bab pertama, ia menyebutkan bahwa tautan keras tidak dapat menjangkau sistem file.

Satu hal penting yang perlu diperhatikan tentang tautan keras adalah bahwa tautan tersebut hanya berfungsi pada sistem file saat ini. Anda tidak dapat membuat tautan keras ke file di sistem file yang berbeda. Untuk melakukan itu, Anda perlu menggunakan tautan simbolis, Bagian 1.4.3.

Saya hanya tahu satu sistem file. Yang dimulai dari root ( /). Pernyataan ini bahwa tautan keras tidak dapat menjangkau sistem file tidak masuk akal bagi saya.

Artikel Wikipedia tentang sistem file Unix juga tidak membantu.

Anton Paras
sumber

Jawaban:

29

Semoga saya bisa menjawab ini dengan cara yang masuk akal untuk Anda. Sebuah sistem file di Linux, umumnya terdiri dari partisi yang diformat dalam salah satu dari berbagai cara (harus pilihan cinta!) Tempat Anda menyimpan file Anda. Baik itu file sistem Anda, atau file pribadi Anda ... semuanya disimpan pada sistem file. Bagian ini sepertinya Anda pahami.

Tetapi bagaimana jika Anda mempartisi hard drive Anda untuk memiliki lebih dari satu partisi (bayangkan Apple Pie dipotong-potong), atau tambahkan hard drive tambahan (mungkin USB stick?). Demi argumen, mereka semua memiliki sistem file juga.

Ketika Anda melihat file di komputer Anda, Anda melihat representasi visual dari data pada sistem file partisi Anda. Setiap nama file sesuai dengan apa yang disebut inode, di mana data Anda, di balik layar, benar-benar hidup. Tautan keras memungkinkan Anda memiliki beberapa "nama file" (karena tidak ada deskripsi yang lebih baik) yang mengarah ke inode yang sama. Ini hanya berfungsi jika tautan keras itu berada di sistem file yang sama. Tautan simbolik sebaliknya menunjuk ke "nama file", yang kemudian dikaitkan dengan inode yang menyimpan data Anda. Maafkan karya seni saya yang kasar tetapi semoga ini menjelaskan lebih baik.

image.jpg             image2.jpg
          \           /
           [your data]

di sini, image.jpg, dan image2.jpg keduanya menunjuk langsung ke data Anda. Keduanya adalah hardlink. Namun...

image.jpg    <-----------  image2.jpg
           \ 
             [your data]

Dalam contoh (kasar) ini, image2.jpg tidak menunjuk ke data Anda, itu menunjuk ke image.jpg ... yang merupakan tautan ke data Anda.

Tautan simbolik dapat bekerja melintasi batas-batas sistem file (dengan asumsi sistem file terpasang dan terpasang, seperti stik usb Anda). Namun tautan keras tidak bisa. Ia tidak tahu apa-apa tentang apa yang ada di sistem file Anda yang lain, atau di mana data Anda disimpan.

Semoga ini membantu membuat lebih masuk akal.

dubkat
sumber
Terima kasih. Saya tidak menyadari partisi file yang berbeda disebut "sistem file."
Anton Paras
1
salah satu hal yang dapat Anda lakukan dengan partisi adalah meletakkan filesystem di atasnya, ada tempat lain Anda dapat meletakkan filesystem dan hal-hal lain yang dapat Anda lakukan dengan partisi, tetapi opsi yang paling umum adalah yang itu.
Jasen
10
Ada satu hierarki file yang dimulai pada "/". Ini akan memiliki satu atau lebih sistem file yang terpasang
mpez0
@ mpez0: Bahkan, dengan eg chroot(2)atau containerisasi nyata Anda dapat memiliki beberapa hierarki, yang mungkin tidak ada hubungannya sama sekali.
Kevin
@Kevin, chrootmengisolasi sebagian hierarki untuk suatu proses dan turunannya, tetapi induk masih memiliki satu hierarki lengkap. Containerisasi dapat melakukannya, tergantung pada seberapa dekat dengan VM itu. Tapi berapa banyak detail yang bisa dimasukkan ke dalam komentar? Terima kasih,
mpez0
23

Sistem File disusun oleh struktur direktori yang disusun untuk entri direktori untuk mengatur file. Setiap entri direktori mengaitkan nama file dengan inode .

Tautan lunak ( simbolik ) adalah entri direktori yang tidak berisi data, itu hanya menunjuk ke entri lain (file atau direktori dalam sistem file yang sama atau sistem file lainnya). Dan ketika Anda menghapus file runcing, tautan simbolis menjadi tidak dapat digunakan.

Hard link adalah entri direktori yang berisi nama file dan nomor inode . Ketika Anda menghapus tautan keras terakhir, Anda tidak lagi dapat mengakses file.

Perbedaan antara soft-link dan hard-link

Kesimpulan:

Karena inode adalah struktur data yang digunakan untuk mewakili objek sistem file, itu internal ke sistem File, dan Anda tidak dapat menunjuk ke inode dari sistem file lain.

Dengan demikian, hard-link hanya valid dalam sistem File yang sama, tetapi soft-link (Symbolic link) dapat menjangkau sistem file karena mereka hanya menunjuk ke entri direktori lain (Antarmuka sistem file, dan bukan objek internal).

Facundo Victor
sumber
1
Jawaban singkat yang bagus.
dubkat
Apa yang akan terjadi jika sistem file lain (katakanlah USB) akan memiliki file dengan NAME yang sama, yang terhubung dengan tautan simbolis kita pada sistem file kita?
Josef Klimuk
@ JosefKlimuk, tautan lunak akan menunjuk ke sebuah jalur, katakanlah /mnt/myfile. Jika Anda memasang sistem file lain ke dalam /mnt/. Tautan lunak akan diselesaikan ke entri sistem file yang dipasang di bawah /mnt/. Jadi, jika Anda memasang sistem file dari perangkat USB Anda /mnt, tautan lunak akan menyelesaikan entri pada sistem file itu.
Facundo Victor
2

Root filesystem dapat terdiri dari beberapa filesystem; /usr/localmungkin dipasang pada partisi yang terpisah dan /homemungkin pada partisi lain pada disk jaringan di tempat lain. Dalam hal ini, tautan keras untuk /usr/local/bin/git(misalnya) mungkin tidak dibuat di luar /usr/local, karena akan menjangkau sistem file .

Alasan untuk ini adalah bahwa inode dialokasikan secara terpisah untuk /, /usr/localdan /home(sekali lagi, dalam contoh ini), dan ketika Anda membuat tautan keras Anda benar-benar hanya membuat nama tambahan untuk inode.

Kusalananda
sumber
2

Hard link memiliki efek menjaga target mereka tetap hidup. Selama setiap tautan keras dapat dijangkau, sistem akan memastikan bahwa targetnya tidak dapat dirilis. Oleh karena itu perlu bahwa semua media yang dapat berisi tautan keras ke inode tertentu dipasang kapan saja sistem akan mencoba untuk menentukan apakah ada referensi yang ada padanya.

Mengingat bahwa masa pakai inode biasanya ditentukan dengan mempertahankan jumlah referensi daripada memindai untuk referensi, dimungkinkan untuk mengatur beberapa hal agar dua atau lebih sistem file yang memiliki tautan satu sama lain dapat digunakan secara independen asalkan tidak perlu menggunakan tautan yang menjembatani antara sistem, dan asalkan tidak perlu menggunakan fsck pada keduanya. Namun jika inode mengandalkan salah satu sistem yang terganggu, satu-satunya cara untuk membuat sistem itu berguna lagi adalah dengan menggunakan bentuk operasi fsck yang dapat memindai kedua sistem file untuk referensi. Karena kendala itu, walaupun dimungkinkan untuk memungkinkan dua sistem file yang saling terkait dapat digunakan secara mandiri, manfaat melakukan hal itu mungkin akan terlalu terbatas untuk membuatnya berharga.

supercat
sumber
Poin bagus, tapi agak terlalu tangensial untuk menjadi jawaban yang bagus.
Joe
@ Jo: Mengijinkan tautan keras ke sistem file silang akan menimbulkan sejumlah kesulitan teknis, tetapi kebanyakan dari mereka bisa diatasi, sehingga menimbulkan pertanyaan apakah ada alasan kuat mengapa mereka tidak boleh. Masalah menjaga-hidup mungkin tampak tidak jelas, tetapi tidak seperti masalah lainnya, itu hanya bisa saya selesaikan dengan menerapkan pembatasan semantik yang parah pada penggunaan tautan seperti itu, yang akan sangat membatasi nilainya.
supercat
Poin bagus. Sistem file dapat dipasang pada perangkat lain dan dimodifikasi, sehingga inode dan tautan dapat "tidak sinkron". Setiap filesystem bisa memiliki GUID dan tautannya bisa menggabungkan GUID itu untuk melacak inode di seluruh filesystem. Mungkin juga ada semacam log pada FS dan kemudian ketika sudah terpasang, sistem host tidak perlu memindai tetapi hanya bisa membaca log dan "mengejar" pada inode yang menghubungkan perubahan (Kapan kita menghapusnya, meskipun?). Intinya adalah FS yang mendasarinya perlu dimodifikasi dengan cara yang tidak sepele dan hanya akan bekerja di seluruh sistem file yang kompatibel.
Rolf
1

Nomor inode tunggal digunakan untuk mewakili file di setiap sistem file. Semua tautan keras berdasarkan nomor inode. Tautan referensi sistem file di sini .

msc
sumber