Dalam situasi apa seseorang ingin menggunakan hard-link daripada soft-link? Saya pribadi tidak pernah mengalami situasi di mana saya ingin menggunakan hard-link di atas soft-link, dan satu-satunya use case yang saya temui ketika mencari di web adalah deduplicating file yang identik .
filesystems
hard-link
Matthew Cline
sumber
sumber
..
selalu inode yang sama seperti.
di direktori induk. Hal-hal sepertifind
dapat memeriksa penghitungan tautan = 2 untuk mendeteksi direktori daun, dan menghindaristat
entri dari readdir untuk mencari subdirektori. Tapi itu hanya fitur kecil yang diaktifkan oleh dukungan untuk hardlink file non-direktori (reguler, symlink, perangkat, soket, dan pipa bernama). (Ya, symlink memiliki inode sendiri, dan dapat di-hardlink.)Jawaban:
Selain dari penggunaan cadangan yang disebutkan dalam komentar lain, yang saya percaya juga termasuk snapshot pada volume BTRFS, kasus penggunaan untuk tautan keras melalui tautan lunak adalah kumpulan file yang diurutkan tag. (Belum tentu metode terbaik untuk membuat koleksi, metode berbasis database berpotensi lebih baik, tetapi untuk koleksi sederhana yang cukup stabil, itu tidak terlalu buruk.)
Koleksi media di mana semua file disimpan dalam satu, flat, direktori dan diurutkan ke direktori lain berdasarkan berbagai kriteria, yaitu: tahun, subjek, artis, genre, dll. Ini bisa berupa koleksi film pribadi, atau kolektif studio komersial bekerja. Pada dasarnya selesai, file disimpan, tidak mungkin dimodifikasi, dan disortir, mungkin ke beberapa lokasi melalui tautan.
Ingatlah bahwa konsep "asli" dan "salin" tidak berlaku untuk tautan keras: setiap tautan ke file adalah asli, tidak ada "salin" dalam arti normal. Namun, untuk deskripsi use-case, istilah-istilah tersebut meniru logika perilaku.
"Asli" disimpan dalam direktori "katalog", dan "salinan" yang diurutkan sulit dihubungkan ke file-file itu. Atribut file pada direktori sortir dapat diatur ke r / o, mencegah perubahan yang tidak disengaja pada nama file dan struktur yang diurutkan, sedangkan atribut pada direktori katalog dapat r / w yang memungkinkannya untuk dimodifikasi sesuai kebutuhan. (Kasus untuk itu adalah file musik di mana beberapa pemain berusaha untuk mengubah nama dan mengatur ulang file berdasarkan tag yang tertanam dalam file media, dari input pengguna, atau pencarian internet.) Selain itu, karena atribut direktori "copy" dapat berbeda dari direktori "asli", struktur yang diurutkan dapat dibuat tersedia untuk grup, atau dunia, dengan akses terbatas sementara "katalog" utama hanya dapat diakses oleh pengguna utama, dengan akses penuh. Namun file itu sendiri akan selalu memiliki atribut yang sama pada semua tautan ke inode itu. (ACL dapat dieksplorasi untuk meningkatkan itu, tetapi bukan bidang pengetahuan saya.)
Jika dokumen asli diganti namanya, atau dipindahkan (direktori "katalog" tunggal menjadi terlalu besar untuk dikelola, misalnya) tautan keras tetap valid, tautan lunak rusak. Jika "salinan" dipindahkan dan tautan lunaknya relatif, maka tautan lunak itu akan, lagi-lagi, diputus, dan tautan keras itu tidak akan.
Catatan: sepertinya ada ketidakkonsistenan tentang bagaimana berbagai alat melaporkan penggunaan disk ketika soft-link terlibat. Namun, dengan tautan keras, tampaknya konsisten. Jadi dengan 100 file dalam katalog yang diurutkan ke dalam koleksi "tag", mungkin dengan mudah ada 500 "salinan" yang ditautkan. (Untuk koleksi foto, katakan tanggal, fotografer, dan rata-rata 3 tag "subjek".) Dolphin, misalnya, akan melaporkan bahwa 100 file untuk hard-link, dan 600 file jika soft-link digunakan. Menariknya, ia melaporkan penggunaan ruang disk yang sama, sehingga terlihat seperti kumpulan besar file kecil untuk tautan-lunak, dan kumpulan kecil file besar untuk tautan-keras.
Peringatan untuk jenis penggunaan-kasus adalah bahwa dalam sistem file yang menggunakan COW, memodifikasi "asli" dapat mematahkan tautan keras, tetapi tidak merusak tautan lunak. Tetapi, jika tujuannya adalah untuk memiliki salinan master, setelah mengedit, menyimpan, dan diurutkan, SAP tidak memasuki skenario.
sumber
stat
hanya akan menampilkan satu tautan.stat
menunjukkan nomor inode yang sama, tetapi ID perangkat berbeda. Harus ada hubungannya dengan cara subvolume yang di-overlay pada volume utama, yang jarang dipasang. Saya menduga bahwa jika volume utama dipasangstat
akan menunjukkan jumlah tautan yang sama dengan jumlah foto yang menahan versi file tersebut. SAP mungkin mengurus modifikasi yang tidak memengaruhi yang lain. Hanya spekulasi berdasarkan rasa ingin tahu yang ringan, tetapi tidak cukup penasaran untuk menggali lebih dalam.Tautan keras berguna untuk kasus di mana Anda tidak ingin mengikat keberadaan kedua file. Pertimbangkan ini:
Sekarang
b
tidak berguna. (Dan langkah-langkah ini mungkin terjadi berjauhan, dilakukan oleh orang yang berbeda, dll.)Sedangkan dengan tautan keras,
b
masih ada dan benar.sumber
Suatu program tunggal dapat mengubah perilakunya tergantung pada nama apa itu diluncurkan sebagai:
Yang mana di sumber diputuskan melalui sesuatu seperti
meskipun detail persisnya akan bervariasi tergantung pada OS dan bahasa yang terlibat.
Ini memungkinkan (kebanyakan) kode identik untuk tidak harus dikompilasi ke dua (kebanyakan) biner identik. Ingat tanggal unix untuk hari-hari ketika ruang disk sangat mahal, meskipun menurut Stevens dalam APUE bab 4 symlink diterapkan di BSD4.2 (1983) untuk menggantikan berbagai keterbatasan hardlink. Program uji untuk memeriksa apakah nama symlink digunakan karena nama program mungkin terlihat seperti:
Dan diuji melalui:
sumber
Ketika perangkat lunak P2P saya selesai mengunduh file tertentu, file tersebut ditempatkan di direktori tertentu. File yang diunduh hampir tidak pernah perlu diedit. Kasus yang umum adalah saya membuat hardlink di direktori yang berbeda di mana saya memerlukan file.
Keuntungan:
rm
ataumv
"copy".rm
"asli" untuk berhenti berbagi file; operasi ini tidak mempengaruhi "copy" di tempat yang diinginkan.Poin utama: jika saya tahu terlebih dahulu file mana yang akan saya buat
rm
, saya mungkin menggunakan symlink. Tapi saya tidak pernah tahu.sumber
Filesystem adalah cara yang sederhana namun efisien untuk mengatur dan mengklasifikasikan file (ini adalah alasan utama keberadaannya). Hardlink memungkinkan tingkat fleksibilitas yang lebih tinggi dalam hal ini.
Seperti disebutkan, tidak ada konsep asli dan salinan ketika berhadapan dengan hardlink, semua entri direktori (hardlink) hanya referensi ke keberadaan file (arahkan ke inode) tanpa prioritas, maka tidak ada juga hardlink yang rusak .. .
Jadi di sini ada beberapa kasus penggunaan yang dihadiri hardlink tetapi softlink tidak :
Bayangkan Anda memiliki koleksi film atau musik atau media lain dan ingin menerapkan kriteria klasifikasi yang berbeda, seperti lagu yang diklasifikasikan oleh artis di cabang (masing-masing artis memiliki sub-direktori sendiri); berdasarkan genre di cabang lain (masing-masing dalam sub-direktori yang berbeda), dll. Tetap Anda tidak ingin menduplikasi file atau memutuskan di mana harus meletakkan "asli" sehingga Anda memiliki kebebasan untuk mengklasifikasi ulang tanpa harus " kelola "dan tautkan kembali file saat bergerak untuk menghindari tautan yang rusak.
Alasan lain adalah untuk menghindari pemborosan ruang penyimpanan yang akan diperlukan untuk memiliki banyak salinan dari file yang sama dan belum memungkinkan
chroot
syscall untuk mendapatkan keuntungan dari subset file di root sistem file "master" (tautan simbolik tidak akan pernah dapat mereferensikan file dari luar yangchroot
sandbox, bahkan jika mereka memiliki path relatif).Alasan lain yang sangat penting tetapi jarang disebutkan untuk ada tautan adalah
..
subdirektori. The..
direktori sebenarnya (di sebagian unix fs implementasi) hardlinks ke direktori induk, tanpa hardlinks ini harus dilaksanakan dengan cara yang sama sekali berbeda, sementara keberadaan hardlinks membuat ini sangat mudah untuk dilaksanakan.sumber
Sangat umum, contoh dunia nyata yang membutuhkan hardlink:
Ini klon dari repo Git lokal dengan menyalin hampir nol. Alih-alih menyalin file objek (file yang tidak dapat diubah digunakan oleh Git untuk "database" -nya), itu hanya hardlink mereka.
Repo apa pun dapat menghapus objek, tetapi inode tetap valid untuk sisa repo. Dan jika suatu objek dihapus dari semua repo, itu dihapus dari disk. Hard link menghasilkan solusi yang sangat kuat dan cepat. Sangat umum di server CI.
Ada versi non-hard-link:
git clone --shared <repository>
. Ini, bagaimanapun, adalah berubah-ubah dan memiliki lebih banyak peringatan karena semua orang bekerja pada direktori yang sama.sumber
Saya baru-baru ini menggunakan use case untuk prosedur pembaruan yang agak aman untuk sistem berbasis U-Boot di mana
uImage
soft-link menunjuk ke gambar untuk boot, idenya adalah bahwa pemadaman listrik seharusnya tidak menimbulkan masalah, tidak peduli pada titik mana dalam proses itu terjadi (dengan asumsi sistem file bermain bersama):Tanpa hardlink tidak akan sesederhana itu.
/ edit:
Berkat komentar saya sekarang tahu bahwa itu akan lebih baik untuk dilakukan:
(Yang
rm
ada di sini agar dapat lebih baik melarikan diri dari keadaan aneh, misalnya jikauImage
adalah sesuatu yang tidak terduga yang akan membuatmv
gagal [tetapi belum tentuln -sf
solusi sebelumnya ].)sumber
ln -sf
bukan atom. Ini menghapus symlink lama dan membuat yang baru. Untuk memperbaikinya, Anda perlu membuat symlink baru dengan nama sementara danrename(2)
(mv
) untuk nama yang ingin Anda ganti.stat("uImage", {st_mode=S_IFREG|0777, st_size=0, ...})
unlink("uImage")
,symlink("backup_image.bin", "uImage")
install.sh
yang memecahkan masalah: git.musl-libc.org/cgit/musl/tree/tools/install.shmv
bahkan dengan-f
mungkin gagal jika tujuan sudah ada sebagai mis. Symlink yang merupakan bagian dari loop symlink. Demo:ln -sf foo bar; ln -sf bar foo; echo "Before:"; ls -l foo bar; >testfile; mv testfile foo || { echo "Using mv -f"; mv -f testfile foo; }; echo "After:"; ls -l foo bar
Salah satu penggunaan yang saya miliki untuk tautan keras adalah ketika mengunduh atau mengompres file yang rusak. Program yang melakukan pengunduhan atau pengompresan (seperti unzip atau unrar) akan sering secara otomatis menghapus file yang tidak lengkap ketika menemui kesalahan, dan biasanya tidak ada pilihan untuk menyimpannya. Jika saya ingin menyimpan file, saya dapat membuat tautan keras ke sana.
sumber
BackupPC adalah sistem cadangan yang menggunakan tautan keras di server untuk menyediakan deduplikasi tingkat file.
File pertama kali disimpan dalam pohon direktori "pool" berdasarkan hash md5 mereka. Setiap cadangan yang menggunakan file itu membuat tautan keras ke file kumpulan. Saat cadangan kedaluwarsa / dihapus, tautan kerasnya dihapus dari sistem file.
Tautan keras lebih baik daripada tautan lunak di sini karena mereka memberikan penghitungan referensi otomatis. Pekerjaan cron secara berkala menghapus file apa pun di direktori kumpulan yang tidak memiliki lebih dari satu tautan.
Metode ini memiliki beberapa kelemahan (terutama, bahwa sulit untuk menggunakan alat berbasis sistem file untuk mereplikasi cadangan toko), tetapi terbukti cukup kuat dalam praktiknya.
Kasus penggunaan lain: server aplikasi web tomcat java memperlakukan nama file sebagai metadata. File java "war" harus dinamai berdasarkan path-nya di server web.
mis:
foo.war
adalah kode java yang melayani url/foo
Sayangnya, ia menyelesaikan symlink sebelum membuat keputusan ini.
Jadi, katakan Anda ingin menggunakan aplikasi build, dan berikan nama file deskriptif (misalnya, dengan nomor rilis atau tanggal). Anda tidak dapat membuat symlink ke file dengan nama "asli" - Anda harus membuat hardlink.
foo.war
symlinked tofoo-20170129.war
tidak berfungsifoo.war
hardlink untukfoo-20170129.war
bekerja.saya tidak suka perilaku kucing jantan ini, tetapi hardlink memberi saya jalan keluar.
sumber