Я столкнулся с вопросом, пытаясь выяснить, какие файлы на моем компьютере занимают больше всего места. Вот информация об общем объеме памяти компьютера, найденная в подсистеме Windows для Linux (WSL) / bash
bballdave025@WORK:~$ df -h /mnt/c
Filesystem Size Used Avail Use% Mounted on
C: 239G 231G 7.8G 97% /mnt/c
Обратите внимание, что мой вопрос не о том, как очистить пространство.
Я начал с проверки каталога Program Files
.
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/
Главный выпуск
Мой WSL bash
du
говорит мне, что на моей машине (которая имеет 239GB
памяти), мой каталог Program Files
занимает 2,5 ТБ из 239GB
доступной памяти. Как будто я держу две пинты воды во рту, не глотая. (Это просто, чтобы показать соотношение размеров - моя проблема не связана с водой.)
Кстати, у меня нет прав администратора - не sudo !!
решать любые вопросы. Я покину из Permission denied
ошибки отказа (что наступит без реального sudo
, как я продолжу писать этот пост. Также обратите внимание, что я работаю на компьютере, поэтому есть вещи, к которым у меня нет доступа.
Основной вопрос: есть ли относительно простой способ проверить использование диска в моей ситуации, то есть проверить использование диска на диске Windows C:
с помощью подсистемы Windows для Linux?
Вторичный вопрос: какого черта здесь происходит? Почему я получаю сообщение о том, что мой каталог Program Files
занимает в 10 раз больше места, чем на моем компьютере?
Кстати... Windows сообщает мне, что размер Program Files
составляет 4.83 GB
, и этот факт я обнаружил с помощью File Explorer
, щелкнув правой кнопкой мыши папку Program Files
и выбрав «Свойства».
Мои попытки найти решение
Моя первая мысль была , что там могут быть какие - то символические ссылки или диск-отображение материала для компании кодирования программного обеспечения или антивирусной программы или что - то, так что я проверил страницу man
для du
Я нашел следующие два флага, которые, как я думал, могут помочь.
-P, --no-dereference don't follow any symbolic links (this is the default) -x, --one-file-system skip directories on different file systems
Однако du -shP /mnt/c/Program\ Files/
, du -shx /mnt/c/Program\ Files/
и даже du -shPx /mnt/c/Program\ Files/
дали мне 2.5T
. В этом отношении, то же самое сделал параметр, который должен следовать за символическими ссылками , du -shL
. На выходе 2.5T
. То же самое для других, возможно, связанных вариантов, которые я пробовал, du -shD
и du -shH
, дали то же самое - 2.5T
для всех.
Моя следующая мысль состояла в том, что, возможно, ярлыки Windows портят вещи, поэтому я постарался исключить их. (Я не знаю, действительно ли этот код предотвращает следующие ярлыки, но я подумал, что стоит попробовать.) Нет кости.
bballdave025@WORK:~$ du -sh --exclude=*.lnk /mnt/c/Program\ Files/
2.5T /mnt/c/Program Files/
Я мог бы забыть о предрассудках и попробовать что-нибудь из <shudder> Windows Command Line </shudder>
или даже стереть мои старые навыки PowerShell
. Я думаю, я мог бы даже прикусить пулю и перейти к каждому каталогу в графическом интерфейсе File Explorer
, щелкнуть каждую папку, выбрать «Свойства», найти, какой подкаталог занимает больше места, войти в каталог с наибольшим использованием памяти и повторить щелчок по каждой папке. .. [спать] ...
... Однако мне интересно, почему я получаю этот странный результат. Когда я смотрю на Program Files (x86)
, я получаю результат, похожий на то, как я кладу себе в рот футбольный мяч (неамериканский). (Еще раз, я говорю с точки зрения соотношения размеров; объем моего рта не связан с моей проблемой.)
bballdave025@WORK:~$ du -sh /mnt/c/Program\ Files\ \(x86\)/
11T /mnt/c/Program Files (x86)/
(Windows / File Explorer
сообщил о размере 22,8 ГБ ... после того, как я подождал 30 секунд.)
Источники и попытки
Из этого ответа суперпользователя у меня появилась идея проверить, что моя ситуация не
Удаленные файлы, вероятно, все еще открыты процессом.
bballdave025@WORK:~$ lsof -a +L1 /mnt/c/Program\ Files/
bballdave025@WORK:~$
Поскольку не было никакого вывода, я предполагаю, что никакие файлы, которые я удалил, все еще не открыты процессом.
Я также посмотрел на этот вопрос и ответ о различных du
результатах на Linux и Cygwin. Однако расхождения в размере, описанные в этом вопросе, были крошечными, поэтому я не считаю, что проблема похожа. Хотя я уверен, что
Тогда нет ничего удивительного в том, что один и тот же набор файлов использует диск разного размера [sic] при хранении в разных файловых системах.
Я думаю , что это сюрприз для того же набор файлов , чтобы использовать любого отличающегося размера диска , когда они действительно хранится в одном месте, даже если существует различные базовые способы доступа к ним.
Следующие шаги
Я решил создать папку на моем диске C:
, поместить небольшой файл и проверить, что размер файла соответствует ожидаемому.
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/
17KB кажется большим для этого маленького текстового файла. Если у нас есть байт на символ, это даст нам 31 байт. Я не знаю, поможет ли это упражнение - создание текстового файла и проверка du
- ответить на вопрос, но это было частью моих усилий.
Я застрял. Я действительно не хочу нажимать на папки. Я также хочу знать, почему у меня такое странное поведение. Есть идеи?
Сведения о системе
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