Apakah tautan simbolik benar-benar membuat perbedaan dalam penggunaan disk?

21

Saya telah membaca di banyak situs web yang, di Linux, tautan simbolik (tautan lunak, symlink) seperti pointer yang mereferensikan file lain, yang dapat ditemukan di mana saja (seperti pintasan Windows). Namun, ketika saya memeriksa penggunaan disk pada folder di mana ada tautan simbolis, ada ketidakcocokan antara apa yang dikatakan manajer file saya dan dulaporan apa . Namun, jika saya mengetik du -L( -L, --dereference; dereference all symbolic linksdari halaman manual), output du -Ldan ukuran yang dilaporkan manajer file saya adalah sama .

Pertanyaan saya adalah : jika saya memiliki softlink ke file besar di, misalnya,homepartisiterpisah saya, apakah saya akan memiliki masalah?

Contoh :

/var/tmpFolder saya sekarang kosong. Mari kita buat file:

$ cat /some/file.txt > file.txt
$ du -ac
164 ./file.txt
168 .
168 total

Dan manajer file saya (Thunar, dalam hal ini) melaporkan

Ukuran: 1 item, total 163,0 kB

Baiklah. Sekarang, mari buat file yang sangat besar /tmpdan symlink ke dalamnya:

$ cat /dir/really_big.txt > /tmp/heavy.txt
$ du -a | grep heavy.txt
408 ./heavy.txt
$ ln -s /tmp/heavy.txt heavy.txt
$ du -ac
164 ./file.txt
0   ./heavy.txt
168 .
168 total

Semuanya baik-baik saja untuk saat ini. Tetapi jika saya membuka file manager saya:

Ukuran: 2 item, total 570,3 kB

Dan akhirnya:

$ du -acL
164 ./file.txt
408 ./heavy.txt
576 .
576 total

Jika partisi di mana /var/tmpterletak 1 GiB besar, dan saya membuat tautan di dalamnya ke file 1 GiB, ¿apakah hard disk saya akan mati? Saya tahu itu duakan menghasilkan 168 dan Thunar 1 GiB, tapi saya tidak tahu mana yang benar.

astrojuanlu
sumber
Apakah Anda yakin bahwa satu program tidak melaporkan misalnya dalam Mib, dan yang lain dalam MB?
HandyGandy
Tidak, ini bukan masalah unit.
astrojuanlu

Jawaban:

34

Tautan simbol memang mengambil ruang, tentu saja, tetapi hanya ruang yang diperlukan untuk menyimpan nama dan target ditambah beberapa byte untuk metadata lainnya. Ruang yang diambil oleh tautan simbolik tidak tergantung pada ruang yang diambil oleh target (setelah semua, target bahkan tidak diharuskan ada).

Plain dumelaporkan ruang yang diambil oleh pohon direktori pada disk. du -Lmelaporkan ruang yang akan diambil oleh pohon direktori jika semua tautan simbolik diganti oleh target mereka. Yang pertama biasanya informasi yang berguna; misalnya, itu ruang yang akan Anda pulihkan jika Anda menghapus pohon, dan itu (kurang-lebih) ruang yang Anda butuhkan untuk membuat cadangan pohon.

dupada pohon direktori menunjukkan (biasanya) sedikit lebih dari total ukuran file. Itu karena dua hal. Pertama, dujuga menghitung direktori, yang membutuhkan sedikit ruang untuk menyimpan nama file dan metadata. Kedua, dumenghitung ruang disk yang diambil oleh file, yang dapat berbeda dari ukuran file: efek yang paling umum adalah bahwa file mengambil jumlah blok integer (4kB pada instalasi Linux yang khas), sehingga file 1-byte dapat ditampilkan sebagai 4kB di du output; tetapi kompresi (seperti bentuk primitif yang disediakan oleh file jarang di hampir setiap sistem file unix) dapat membuat ukuran file lebih besar dari penggunaan disk.

Dari angka yang Anda berikan, tampaknya Thunar melaporkan jumlah ukuran file di pohon direktori, mengikuti tautan simbolik . Ini sebenarnya mengatakannya dengan cara yang halus - itu mengklaim bahwa ukuran total 570,3 kB, bukan bahwa penggunaan disk adalah 570,3 kB. Apa yang sama sekali tidak terlihat dari antarmuka pengguna atau dokumentasi adalah bahwa Thunar mengikuti tautan simbolik ketika menghitung ukuran.

Mana yang “benar” adalah masalah subyektif. dumelaporkan penggunaan disk. Thunar melaporkan ukuran total mengikuti tautan simbolis. Membuat tautan simbolis memiliki dampak yang dapat diabaikan pada penggunaan disk, tetapi menurut definisi memang mengubah total tautan simbolis-ukuran berikut yang dilaporkan Thunar.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Saya sudah mengedit pertanyaan saya jadi saya pikir sudah cukup jelas sekarang, tetapi terima kasih atas jawabannya.
astrojuanlu
@ Juanlu001: Saya telah memperbarui jawaban saya sesuai dengan itu. Singkatnya, dumenunjukkan penggunaan disk, sementara Thunar menunjukkan sesuatu yang lain.
Gilles 'SO- stop being evil'
Perbedaannya penting ketika Anda membuat cadangan yang menyelesaikan symlink. Anda mungkin ingin melakukan itu jika Anda tahu Anda memiliki beberapa symlink di bawah pohon yang menentukan lokasi di luar pohon, tetapi hal-hal lain di luar pohon itu tidak penting bagi Anda.
Mel
3

Saya pikir secara default pengelola file Anda mencoba untuk mendapatkan ukuran file yang ditunjuk oleh tautan lunak, sedangkan dumemberi Anda ukuran direktori dan tautan lunak itu sendiri tetapi bukan file yang mereka tunjuk.

Untuk memperjelas,

`du`    -> size of directory + size of all the softlinks  
`du -L` -> size of directory + size of all the files that the softlinks are pointing to.

Saya tidak yakin apakah ini yang Anda tanyakan, tetapi jika ya, maka saya yakin ini bisa menjadi jawaban untuk pertanyaan Anda.

Jay
sumber
Maaf itu tidak menjawab pertanyaan saya: apa yang Anda katakan saya sudah tahu. Saya baru saja mengeditnya.
astrojuanlu