Neden WSL'deki du du, makine belleğinden daha büyük bir dizin boyutu veriyor?


1

Bilgisayarımdaki hangi dosyaların en fazla yer kapladığını bulmaya çalışırken sorumla karşılaştım. İşte Windows Alt Sisteminden Linux için bulunan toplam makine hafızasına ilişkin bilgiler (WSL) /bash

bballdave025@WORK:~$ df -h /mnt/c
Filesystem      Size  Used Avail Use% Mounted on
C:              239G  231G  7.8G  97% /mnt/c

Sorumun alanın nasıl temizleneceği ile ilgili olmadığını unutmayın.

Program FilesDizini kontrol ederek başladım .

bballdave025@WORK:~$ du -sh /mnt/c/Program\ Files/
du: cannot read directory '/mnt/c/Program Files/Microsoft Policy Platform/authorityDb': Permission denied
du: cannot read directory '/mnt/c/Program Files/Microsoft SQL Server/130/Shared/ErrorDumps': Permission denied
du: cannot read directory '/mnt/c/Program Files/WindowsApps': Permission denied
2.5T    /mnt/c/Program Files/

Ana konu

Benim WSL bash du, (vardır benim makinede bana anlatıyor 239GBbellek,) benim Program Filesdizin kaplıyor 2.5TB ait 239GBkullanılabilir bellek. Sanki ağzımda yutmadan iki bardak su tutuyorum. (Bu sadece boyutların oranını göstermek içindir - benim sorunum su içermiyor.)

Bu arada, yönetici haklarım yok - sudo !!herhangi bir sorunu çözmek için hayır . Bu yazıyı yazmaya devam ederken Permission deniedhataları ( gerçek olmayan bir biçimde ortaya çıkacak) dışarıda bırakacağım . Ayrıca çalışma bilgisayarında olduğumu da unutmayın, bu yüzden erişemediğim şeyler var. sudo

Ana soru: Benim durumumda disk kullanımını kontrol etmek, yani C:Linux için Windows Subsystem kullanarak bir Windows sürücüdeki disk kullanımını kontrol etmek için nispeten basit bir yol var mı ?

İkincil Soru: Burada neler halt oluyor? Neden dizimin makinemde Program Filesolduğundan 10 kat daha fazla yer kapladığı konusunda bir rapor alıyorum ?

Bu arada ... , Windows söylüyor Program Filesbir büyüklüğe sahiptir 4.83 GB, ben kullanarak bulduğu gerçeği File Explorerüzerinde, sağ tıklayarak Program Files'Özellikler'' klasöründe ve seçme


Çözümdeki Girişimlerim

İlk düşüncem, şirketin kodlama yazılımı ya da bir virüsten koruma programı ya da başka bir şey için bazı sembolik bağlantılar ya da sürücü haritalama eşyaları olabileceği idi, bu yüzden mansayfanın kontrolünü yaptım du. Yardım edebileceğimi düşündüğüm iki bayrak buldum.

-P, --no-dereference
              don't follow any symbolic links (this is the default)
-x, --one-file-system
              skip directories on different file systems

Ancak du -shP /mnt/c/Program\ Files/, du -shx /mnt/c/Program\ Files/ve hatta du -shPx /mnt/c/Program\ Files/bana verdi 2.5T. Bu konuda, sembolik izleri sürmesi gereken seçenek de aynıydı du -shL. Çıktı 2.5T. Aynısı, denediğim belki ilgili seçenekler du -shDve du -shHaynısını verdi - 2.5Thepsi için.

Bir sonraki düşüncem belki de Windows kısayollarının işleri karıştırdığıydı, ben de onları dışlamaya çalıştım. (Bu kodun kısayolları izlemesini gerçekten engelleyip engellemediğini bilmiyorum ama denemeye değer olduğunu düşündüm.) Zar yok.

bballdave025@WORK:~$ du -sh --exclude=*.lnk /mnt/c/Program\ Files/
2.5T    /mnt/c/Program Files/

Önyargıları geride bırakabilir ve <shudder> Windows Command Line </shudder>eski PowerShellbecerilerimin tozunu çıkaracak bir şey deneyebilirim . Sanırım kurşunu bile ısırıp File ExplorerGUI'deki her dizine gidebilir , her bir klasörü tıklayabilir, 'Özellikler'i seçebilir, hangi alt dizinin en fazla yer kapladığını bulabilir, en çok bellek kullanımı olan dizine girebilir ve her bir klasörü tıklatarak tekrar ... [uyuyor] ...

... Ancak, neden bu garip sonuca ulaştığımla ilgileniyorum. Ben baktığımda Program Files (x86), bir doldurma gibi bir sonuç elde futbol topu ağzımda (non-Amerikan) futbol. (Bir kez daha, boyutların oranı açısından konuşuyorum; ağzımın hacmi sorunumla ilgili değil.)

bballdave025@WORK:~$ du -sh /mnt/c/Program\ Files\ \(x86\)/
11T     /mnt/c/Program Files (x86)/

(Windows / File Explorer22,8 GB boyutunda bir rapor verdi ... 30 saniye bekledikten sonra.)

Kaynaklar ve Girişimler

Gönderen bu Super User cevap , benim durum olmadığını kontrol denemek için bir fikrim var

Kaldırdığınız dosyalar hala bir işlem tarafından açıldı.

bballdave025@WORK:~$ lsof -a +L1 /mnt/c/Program\ Files/
bballdave025@WORK:~$

Çıktı olmadığından, kaldırdığım dosyaların hala bir işlem tarafından açılmadığını varsayıyorum.

Ayrıca bu soruya baktım vedu Linux ve Cygwin'deki farklı sonuçlar hakkında cevaplar aldım . Ancak, bu soruda açıklanan boyuttaki farklılıklar küçüktü, bu yüzden sorunun benzer olduğuna inanmıyorum. Ben emin iken

Farklı dosya sistemlerinde depolandığında aynı dosya grubunun farklı [sic] disk boyutunu kullanması şaşırtıcı değildir.

Ben do kullanımı aynı dosya kümesi için bir sürpriz olduğunu düşünüyorum herhangi onları gerçekten erişmek için farklı temel yolu vardır bile, tek bir yerde saklanır yaparken farklı disk boyutunu.

Sonraki adımlar

Sürücümde bir klasör oluşturmaya C:, küçük bir dosyaya koymaya karar verdim ve dosya boyutunun beklendiği gibi olup olmadığını kontrol ettim.

bballdave025@WORK:~$ mkdir -p /mnt/c/Users/bballdave025/little_guy
bballdave025@WORK:~$ echo "This should make a small file." > /mnt/c/Users/bballdave025/little_guy/small_file.txt
bballdave025@WORK:~$ du -sh /mnt/c/Users/bballdave025/little_guy/small_file.txt
17K     /mnt/c/Users/bballdave025/little_guy/small_file.txt
bballdave025@WORK:~$ du -shPx /mnt/c/Users/bballdave025/little_guy/
17K     /mnt/c/Users/bballdve025/little_guy/

Bu küçük bitli metin dosyası için 17KB büyük görünüyor. Her karakter için bir bayt varsa, bu bize 31 bayt verir. Bu alıştırmanın - bir metin dosyası yapmak ve kontrol etmek du- soruyu cevaplamaya yardımcı olup olmayacağını bilmiyorum , ama bu çabamın bir parçası oldu.

Sıkıştım. Gerçekten klasörlere tıklamak istemiyorum. Ayrıca bu tuhaf davranışı neden aldığımı da bilmek istiyorum. Herhangi bir fikir?


Sistem detayları

bballdave025@WORK:~$ uname -a | head -n 1
Linux WORK 4.4.0-43-Microsoft #1-Microsoft Wed Dec 31 14:42:53 PST 2014 x86_64 x86_64 x86_64 GNU/Linux
bballdave025@WORK:~$ bash --version | head -n 1
GNU bash, version 4.3.46(1)-release (x86_64-pc-linux-gnu)
bballdave025@WORK:~$ systeminfo.exe | sed -n 's/^OS\ *//p'
Unable to translate current working directory. Using C:\Windows\System32
Name:                   Microsoft Windows 10 Enterprise
Version:                10.0.15063 N/A Build 15063
Manufacturer:           Microsoft Corporation
Configuration:          Member Workstation
Build Type:             Multiprocessor Free

Önyargılarımı geride bırakabilir ve <shudder> Windows Command Line </shudder>eski PowerShellbecerilerimin tozunu çıkaracak bir şey deneyebilirim . Sanırım kurşunu bile ısırıp File ExplorerGUI'deki her dizine gidebilir , her bir klasörü tıklayabilir, 'Özellikler'i seçebilir, hangi alt dizinin en fazla yer kapladığını bulabilir, en çok bellek kullanımı olan dizine girebilir ve her bir klasörü tıklatarak tekrar ... [uyku] ... Ben bir bashçözümü tercih ederim (daha güçlü, daha hızlı) ve ayrıca garip davranışları da merak ediyorum.
bballdave025

WSL, iznini (tür) Windows hesabından devralır. Bu nedenle, wsl.exe dosyasını yönetici olarak açarsanız, ProgramFiles'a Linux araçlarıyla erişebilirsiniz. Bu soru% 90 süper kullanıcı-ish türüdür.
Biswapriyo

Yardımınız için teşekkürler. @KamilMaciorowski tarafından paylaşılan bağlantıyı görmedim. <s> Soruyu StackOverflow'dan sileceğim. </s> Aslında, her iki gönderideki yorumu birleştirmenin mümkün olup olmadığını göreceğim. Bunu gören bir moderatör varsa, bunu yapabilir misiniz ya da nasıl yapılacağını bana bildirir misiniz? Yarın sabaha kadar birleştirilmiş / taşınmamışsa, SO sorusunu sileceğim. Tekrar teşekkürler.
bballdave025

2
Bu hata bir buçuk yıl önce ve daha sonra birkaç kez daha bildirildi (sayfanın en altına bakın). Sysinternals, Vista / Seven çevresinde bir yerde en son denememe rağmen , çalışması gereken Windows yerel bir du sürümüne sahip .
dave_thompson_085

İyi nokta, @KamilMaciorowski. Diğerini zaten sildim, çünkü sadece bir yorum vardı ve bu daha komik bir şeydi. Siteyi anlamama ve daha iyi kullanmama yardım ettiğin için teşekkür ederim.
bballdave025
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.