![Существует ли инструмент Linux CLI для определения «используемого» пространства раздела? (например, gparted)](https://rvso.com/image/1615546/%D0%A1%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D1%83%D0%B5%D1%82%20%D0%BB%D0%B8%20%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%20Linux%20CLI%20%D0%B4%D0%BB%D1%8F%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20%C2%AB%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC%D0%BE%D0%B3%D0%BE%C2%BB%20%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%B0%20%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B0%3F%20(%D0%BD%D0%B0%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%2C%20gparted).png)
Я уменьшаю раздел Linux SDCard, используя замечательное руководство AOakley. Я пытаюсь автоматизировать это, но, похоже, нет инструмента командной строки для определения количества используемых байтов в разделе.
Например, gparted сообщает мне, что занято 1,88 ГБ из 6,99 ГБ (обратите внимание, я использую /dev/loop0, который смонтирован во втором разделе /dev/sdb):
df
неправильно:
% df /dev/loop0
Filesystem ... Use%
udev ... 0%
...и fdisk
не parted
распечатывать использованное пространство.
Что я могу использовать из командной строки, чтобы определить используемое пространство в разделе gparted
?
ОТВЕТ: Резюме ниже: Раздел, ext4
который позволяет мне использовать dumpe2fs
и извлекать: free blocks
, block count
(всего), и block size
который можно объединить, чтобы точно соответствовать gparted
. Оказывается, он resize2fs
обрабатывает фрагментацию во время сжатия. Смотрите страницу руководства для ext4
получения дополнительной информации (хотя редактор страницы руководства немного озлоблен по поводу GiB против GB! :)
решение1
df
почти правильный инструмент, но вы должны запросить точку монтирования (или любой файл ниже), которая принадлежит файловой системе, которую вы хотите проверить, а не узел устройства. Узел, который вы использовали, /dev/loop0
, является специальным файлом, который принадлежит udev
виртуальной файловой системе; следовательно, вы получили udev
.
Смонтируйте /dev/loop0
(или /dev/sdb2
, я не уверен, зачем это нужно /dev/loop0
) где-нибудь (это может быть ro
mount) и вызовите df /the/mountpoint
. Затем df
вам расскажут, что файловая система сообщает о себе.
Я сказал " df
этопочти«правильный инструмент», поскольку нет гарантии, что вы сможете сжать файловую систему (а затем и раздел) до размера, сообщаемого инструментом. То, что df
выведет результат, может быть вашей первой (или, скорее, нулевой) оценкой.
Вам нужны разные инструменты для изменения размера различных полевых систем. В идеальном мире такой инструмент (или какой-то сопутствующий инструмент) способен сообщить вам минимальный возможный размер или, по крайней мере, минимальный размер, для которого изменение размера будет наверняка успешным. В реальности вы можете столкнуться с этим:
Известные ошибки
Минимальный размер файловой системы, оцененный с помощью,resize2fs
может быть неверным, особенно для файловых систем с размером блока 1 КБ и 2 КБ.
(источник)
gparted
использует специфические для файловой системы инструменты. Я запустил его с strace
и не увидел никаких доказательств того, что он использует df
. Я увидел btrfs filesystem show …
, dumpe2fs …
, …
Краткое содержание:
- Вы использовали
df
его неправильно. - В любом случае лучше использовать инструмент, специфичный для файловой системы;
gparted
делает. Я не могу сказать вам, какой инструмент вам следует использовать, поскольку вы не указали рассматриваемую файловую систему.