Linux - Как узнать карту блоков данного файла и / или карту свободного пространства раздела - PullRequest
1 голос
/ 24 мая 2010

Я нахожусь в Linux и мне нужно знать одну из двух вещей:

1) Если у меня есть обычный файл в какой-то файловой системе в разделе под Linux, есть ли способ узнать наборфизические блоки, которые этот файл занимает на диске из пространства пользователя?Или хотя бы набор кластеров файловой системы?

2) Есть ли способ получить ту же информацию обо всем свободном пространстве данной файловой системы?

В обоих случаях я понимаючто если есть какой-либо возможный способ извлечь эту информацию, она, вероятно, будет совершенно небезопасной и быстрой (что-то может случиться с этими наборами блоков между тем временем, когда я их увижу и как-то на них воздействую).Я также действительно не хочу реализацию, которая должна знать много о каждой файловой системе.

Ответы [ 3 ]

3 голосов
/ 08 ноября 2011

По крайней мере, для вашего первого вопроса это возможно независимым от файловой системы способом. Копирование из моего ответа на вопрос об ошибке сервера :

Простой способ получить список блоков (без необходимости читать из раздела, как в debugfs ответах) - это использовать FIBMAP ioctl. Я не знаю ни одной команды для этого, но написать ее очень просто; быстрый поиск в Google дал мне пример использования FIBMAP , который делает именно то, что вы хотите. Одним из преимуществ является то, что он будет работать на любой файловой системе, которая поддерживает операцию bmap, а не только на ext3.

Более новой (и более эффективной) альтернативой является FIEMAP ioctl, который также может возвращать подробную информацию о экстентах (полезно для ext4).

К сожалению, я не знаю ничего подобного для свободного пространства. Я знаю только о FITRIM, который указывает базовому блочному устройству отбрасывать блоки, соответствующие свободному пространству файловой системы.

1 голос
/ 05 октября 2012

A filefrag инструмент командной строки, давайте рассмотрим распределение файлов.Он использует ioctl FIEMAP / FIBMAP, упомянутые в предыдущих ответах.Как упоминалось ранее, это зависит от файловой системы.Не уверен, что что-то кроме ext2 / 3/4 поддерживает эти ioctls.

Я не уверен, относятся ли указанные физические значения к началу диска или к началу блочного устройства (раздел или логическоеобъем).Я чувствую, что это может быть последним.Вызов его для группы файлов, расположенных на одном диске, но в разных разделах, скажет.

Команда dumpe2fs сообщит о свободных блоках.Опять же, это специфично для файловых систем ext2 / 3/4.Кажется, номера блоков относятся к разделу.

1 голос
/ 24 мая 2010

Невозможно независимым от файловой системы способом. Файловые системы не обязательно даже построены на блочных устройствах (простой пример: NFS).

Для ext2, ext3 и ext4 вы можете использовать библиотеку ext2fslib, входящую в дистрибутив e2fsprogs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...