Bagaimana saya bisa memeriksa ukuran sebenarnya yang digunakan dalam direktori NTFS dengan banyak hardlink?

14

Pada volume Win7 NTFS, saya menggunakan cwrsync yang mendukung --link-dest dengan benar untuk membuat backup tipe "snapshot". Jadi saya punya:

z:\backups\2010-11-28\cygdrive\c\Users\...
z:\backups\2010-12-02\cygdrive\c\Users\...

Konten 2010-12-02 sebagian besar hardlink kembali ke file di direktori 2010-11-28, tetapi ada beberapa file baru atau yang diubah hanya di 2010-12-02. Di linux, utilitas 'du' akan memberi tahu saya ukuran sebenarnya yang diambil oleh setiap snapshot tambahan. Pada Windows, explorer dan du di bawah cygwin keduanya tertipu oleh hardlinks dan menunjukkan 2010-12-02 mengambil ruang lebih sedikit daripada 2010-11-28.

Apakah ada utilitas Windows yang akan menunjukkan ruang yang benar digunakan secara akut?

kbyrd
sumber
Alat-alat yang menangani hal ini akan sangat membantu dalam mendapatkan gambaran yang akurat tentang mengapa folder / winsxs tumbuh begitu besar, dan dapatkah ini dibuat lebih kecil? dan
matt wilkie
ini tampaknya menjadi pertanyaan & jawaban de-faktor untuk penggunaan disk normal: Bagaimana saya bisa memvisualisasikan penggunaan sistem file pada Windows?
matt wilkie

Jawaban:

11

Coba gunakan Sysinternals Disk Usage (jika tidak diketahui sebagai du), secara khusus menggunakan tanda -udan -vhanya akan menghitung kejadian unik, dan akan menunjukkan penggunaan setiap folder saat berjalan.

Sejauh yang saya tahu sistem file tidak menunjukkan perbedaan antara file asli dan tautan keras (yang sebenarnya adalah titik tautan keras) sehingga Anda tidak dapat mengabaikannya berdasarkan folder-demi-folder, tetapi perlu melakukan ini secara komparatif.

Untuk menguji saya membuat folder acak dengan 6 file masuk ke. Mengkloning semuanya. Kemudian buat beberapa tautan keras dan lunak di dalam folder pertama untuk merujuk file lain di folder pertama, dan juga beberapa di folder kedua.

Menjalankan du -u -v testFldhasil dalam (perhatikan nilai-nilai di sebelah folder berada di KiB):

       104  <path>\testFld\A
        54  <path>\testFld\B
       149  <path>\testFld

Totals:
Files:        12
Directories:  2
Size:         162,794 bytes
Size on disk: 162,794 bytes

Menjalankan du -u -v testFld\ahasil dalam:

104  <path>\testFld\a
...

Menjalankan du -u -v testFld\bhasil dalam:

74   <path>\testFld\b
...

Perhatikan ketidakcocokan?
Symlinks dalam A yang merujuk ke file dalam B hanya dihitung terhadap A selama menjalankan "penuh", dan B hanya mengembalikan 54 (meskipun file awalnya dalam B dan ditautkan dari A). Saat Anda mengukur B secara terpisah (atau, jika Anda tidak menggunakan -ubendera unik) itu akan menghitung ukuran "penuh" dari 74.

DMA57361
sumber
1
Terima kasih, saya tidak tahu tentang du sysinternals, hanya yang cygwin. Rupanya cygwin du melakukan apa yang saya inginkan juga, saya hanya tidak berpikir untuk mencobanya sebelum memulai hadiah.
kbyrd
Jawaban ini membingungkan fungsi -ubendera. Anda mendapatkan "penuh" ukuran jika Anda menggunakan satu -ubendera. Tanpa itu, itu hanya menghitung 1 contoh dari setiap file yang ditautkan. Mengatakan demikian dalam dokumen: docs.microsoft.com/en-gb/sysinternals/downloads/du dan pengujian memverifikasinya.
martixy
2

PowerShell 5 mungkin bisa menjadi pilihan. Ini tersedia untuk Windows 7 tetapi saya hanya menguji ini pada Server 2012 R2 dengan Pratinjau April 2015

Penyedia sistem file di PowerShell 5 memiliki dua properti baru LinkTypedan Target:

ls taskmgr.exe | fl LinkType,Target

ini mengembalikan:

LinkType : HardLink
Target   : C:\Windows\WinSxS\amd64_microsoft-windows-advancedtaskmanager_..._6.3.9600.17..2\Taskmgr.exe

Jadi sekarang saya hanya dapat menampilkan semua file di system32 yang bukan hardlink:

cd $env:SystemRoot\System32
ls -Recurse -File -force -ErrorAction SilentlyContinue | ? LinkType -ne HardLink | Measure-Object -Property Length -Sum

ini mengembalikan:

Count    : 844
Sum      : 502,486,831

Anda dapat membandingkannya dengan semua file:

ls -Recurse -File -force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum

Count    : 14092
Sum      : 2,538,256,262

Jadi, lebih dari 13.000 file dengan 2GB + adalah hardlink

Peter Hahndorf
sumber
1

TreeSize Professional (~ $ 55, uji coba 30 hari) mengklaim untuk membedakan ruang hardlink NTFS. Sebuah uji coba cepat sepertinya membuktikan hal ini.

Dukungan hardlink tidak dihidupkan di luar kotak: pergi ke Alat> Opsi> Pindai , pindai ulang, kemudian gunakan Ctrl-1dan Ctrl-2untuk beralih antara Ukuran dan ruang yang dialokasikan . Alokasi adalah ruang aktual yang digunakan, sedangkan Ukuran adalah statistik yang biasanya dilaporkan oleh program lain.

Ada penalti kinerja untuk mengaktifkan dukungan hardlink (dan juga symlink dan mount jika Anda menginginkannya juga). Palet warnanya norak untuk seleraku, tapi itu tampaknya setara untuk kursus dalam genre ini. Juga berhati-hatilah saat mengklik di sekitar area bagan kotak - mudah untuk secara tidak sengaja memindahkan folder dengan drag-n-drop yang salah ketika Anda hanya bermaksud meluaskannya.

matt wilkie
sumber
1

Saya pikir beberapa fakta perlu ditetapkan di sini.

Windows tidak dapat "mendeteksi" hardlink, karena setiap file sebenarnya adalah hardlink ke banyak byte pada disk.

Du tool mendeteksi duplikat, tetapi itu juga salah, karena jika folder A berisi file dan B hanya berisi hardlink ke file dalam A, maka du A dan du B akan mengembalikan jawaban yang sama - ukuran file yang awalnya berasal dari A, tetapi file-file ini sekarang juga dalam B.

Ini sebenarnya benar, karena misalnya jika Anda menghapus A maka file-nya tidak akan dihapus pada disk, karena mereka masih dirujuk oleh B. Dengan hard-link, file mana yang merupakan sumber dan mana yang merupakan hard-link tersebut. cukup sewenang-wenang dan tidak berarti.

Produk-produk seperti du akan mencantumkan direktori sambil menduplikasi duplikat. Ini hanya akan berfungsi jika semua file dan hard-link terkandung dalam satu direktori. Banyak produk daftar folder melakukan itu.

Kesimpulan: Dengan tautan keras, pertanyaan tentang "ukuran aktual yang digunakan dalam direktori NTFS" tidak ada artinya.

harrymc
sumber
1

Saya juga melakukan riset tentang pertanyaan ini. Inilah hasil yang saya temukan.

Ukuran folder yang berisi file yang di-hardlink di NTFS dapat dipertimbangkan dalam tiga arti berbeda:

  1. Ukuran termasuk ukuran semua file yang di-link (yang ditunjukkan oleh WE).
  2. Ukuran file unik hanya dalam hal folder saat ini.
  3. Ukuran file unik hanya dari segi keseluruhan disk.

Angka 2 adalah apa yang diperlihatkan oleh TreeSize Professional, di tab Details, Allocated kolom, jika opsi "Track NTFS hardlinks" diaktifkan.

Berikut ini adalah folder exx untuk winxs (7.5Gb dalam oposisi untuk 10):

gambar

Menerima nilai nomor 3 masih menjadi pertanyaan bagi saya. Meskipun saya bisa mendapatkan batas bawah dengan menggunakan Total Commander dengan plugin NL_Info. Apa yang saya dapatkan adalah ukuran yang ditempati oleh file yang hanya memiliki satu hardlink (file unik). Itu sekitar 5Gb untuk contoh yang diberikan.

Jadi mencoba memperluas jawaban harrymc atau mengatakan dengan kata lain.

tschesseket
sumber
0

Anda dapat menggunakan ln.exe untuk menampilkan "ukuran sebenarnya" dari pohon direktori:

ln.exe --truesize z:\backups\.

Ini hanya akan mendeteksi hardlink di bawah folder mulai itu.

Limer
sumber