Provided by: manpages-ru-dev_4.21.0-2_all bug

ИМЯ

       ioctl_getfsmap - возвращает физическую планировку файловой системы

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #include <linux/fsmap.h>  /* Definition of FS_IOC_GETFSMAP,
                                    FM?_OF_*, and *FMR_OWN_* constants */
       #include <sys/ioctl.h>

       int ioctl(int fd, FS_IOC_GETFSMAP, struct fsmap_head * arg);

ОПИСАНИЕ

       Операция  ioctl(2)  возвращает  отображение  физических  зон  для  файловой  системы.  Эта
       информация может использоваться для понимания какие файлы отображены на  физический  блок,
       обследования свободного пространства, поиска известных плохих блоков и для других вещей.

       Основным  аргументом  данной  операции является указатель на единственную структуру struct
       fsmap_head:

           struct fsmap {
               __u32 fmr_device;      /* идентификатор устройства */
               __u32 fmr_flags;       /* флаги отображения */
               __u64 fmr_physical;    /* смещение сегмента на устройстве */
               __u64 fmr_owner;       /* идентификатор владельца */
               __u64 fmr_offset;      /* смещение сегмента в файле */
               __u64 fmr_length;      /* длина сегмента */
               __u64 fmr_reserved[3]; /* должно быть равно нулю */
           };

           struct fsmap_head {
               __u32 fmh_iflags;       /* управляющие флаги */
               __u32 fmh_oflags;       /* флаги результата */
               __u32 fmh_count;        /* кол-во элементов в массиве включая входные */
               __u32 fmh_entries;      /* кол-во заполненных элементов (результат) */
               __u64 fmh_reserved[6];  /* должно быть равно нулю */

               struct fsmap fmh_keys[2];  /* низший и высший ключи
                                             для поиска отображения */
               struct fsmap fmh_recs[];   /* возвращаемые записи */
           };

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

       Отображения  файловых  систем  копируются  в  массив  fmh_recs, следующий сразу за данными
       заголовка.

   Поля struct fsmap_head
       Поле  fmh_iflags  представляет  собой  битовую  маску,  передаваемую  ядру  для  изменения
       результата.  В  настоящее  время  ни одного флага не определено, поэтому вызывающий должен
       присвоить этому значению ноль.

       Поле fmh_oflags представляет собой битовую маску, устанавливаемую ядром в  соответствии  с
       возвращаемыми   отображениями.   Если   установлен   FMH_OF_DEV_T,   то   поле  fmr_device
       представляет структуру  dev_t,  содержащую  основной  и  вспомогательный  номера  блочного
       устройства.

       Поле  fmh_count содержит количество элементов массива, передаваемого ядру. Если поле равно
       нулю, то fmh_entries будет присвоено количество записей, которые были бы возвращены,  если
       бы массив был бы достаточного размера; информация об отображении не возвращается.

       В поле fmh_entries содержится количество элементов в массиве fmh_recs, содержащем полезную
       информацию.

       Поля fmh_reserved должны быть равны нулю.

   Ключи
       Две записи ключей в fsmap_head.fmh_keys задают низший и высший записи зон  в  пространстве
       ключе,  которые  вызывающий хочет получить. Для файловой системы, использующей общие блоки
       между  файлами,  вероятно,  потребуется  кортеж  (устройство,  физический_блок,  владелец,
       смещение,  флаги) в качестве уникального индекса отображающей записи файловой системы. Для
       классических файловых систем без общих блоков для указания записи  может  быть  достаточно
       только (устройство, физический_блок, флаги). Например, если низший ключ равен (8:0, 36864,
       0, 0, 0), то файловая система вернёт только записи для зон, начинающихся  диске  с  36 КиБ
       или  выше. Если высший ключ равен (8:0, 1048576, 0, 0, 0), то возвратятся только записи до
       1 МиБ. Формат fmr_device в ключах должен совпадать с форматом того же поля в  возвращаемых
       записях  (описано  далее).  По  соглашению  при запросе поле fsmap_head.fmh_keys[0] должно
       содержать низший ключ, а fsmap_head.fmh_keys[1] должно содержать высший ключ.

       По соглашению, если fmr_length задано в низшем ключе, то,  при  необходимости,  оно  будет
       добавлено  к  fmr_block  или  fmr_offset.  Вызывающий  может использовать эту тонкость для
       настройки последующих вызовов копируя fsmap_head.fmh_recs[fsmap_head.fmh_entries  -  1]  в
       низший   ключ.   Эту   возможность   предоставляет  функция  fsmap_advance  (определена  в
       linux/fsmap.h).

   Поля struct fsmap
       Поле fmr_device уникально определяет нижележащее устройство  хранения.  Если  в  заголовке
       поля  fmh_oflags  установлен  флаг  FMH_OF_DEV_T,  то это поле содержит dev_t, из которого
       можно извлечь основной и вспомогательный номера. Если флаг  не  установлен,  то  это  поле
       содержит  значение,  которое  должно  быть  уникально  для  каждого уникального устройства
       хранения.

       Поле fmr_physical содержит дисковый адрес зоны в байтах.

       Поле fmr_owner содержит владельца зоны (extent). Оно  равно  номеру  иноды,  если  в  поле
       fmr_flags  не  установлен  флаг FMR_OF_SPECIAL_OWNER, иначе значение определяется файловой
       системой. Подробней о значениях владельца смотрите в разделе ниже.

       Поле fmr_offset содержит логический адрес (в байтах) в записи отображения.  Оно  не  имеет
       смысла, если в fmr_flags указан FMR_OF_SPECIAL_OWNER или FMR_OF_EXTENT_MAP.

       Поле fmr_length содержит длину зоны в байтах.

       Поле fmr_flags является битовой маской флагов состояния зоны. Описание бит:

           FMR_OF_PREALLOC
                  Зона выделена, но пока не записана.

           FMR_OF_ATTR_FORK
                  Зона содержит расширенные атрибуты данных.

           FMR_OF_EXTENT_MAP
                  Зона содержит карту отображения зоны владельца.

           FMR_OF_SHARED
                  Части зоны можно использовать совместно.

           FMR_OF_SPECIAL_OWNER
                  Поле fmr_owner содержит специальное значение, а не номер иноды.

           FMR_OF_LAST
                  Это последняя запись в наборе данных.

       Полю fmr_reserved будет присвоен ноль.

   Значения владельца
       В принципе, значение поля fmr_owner для зона не метаданных должно быть равно номеру иноды.
       Однако файловые системы не обязаны сообщать номера инод; вместо  них  они  могут  выдавать
       FMR_OWN_UNKNOWN,  если:  номер  иноды нельзя получить простым образом, вызывающий не имеет
       достаточно прав, файловая система не поддерживает стабильные номера  инод  или  по  другим
       причинам.  Если  файловая  система  хочет  ограничить  выдачу  номеров  инод определёнными
       мандатами процесса, то  для  этой  цели  настоятельно  рекомендуется  использовать  мандат
       CAP_SYS_ADMIN.

       Для всех файловых систем имеются следующие специальные значения владельца:

           FMR_OWN_FREE
                  Свободное место.

           FMR_OWN_UNKNOWN
                  Данная  зона  используется,  но  её  владелец  не известен или его нельзя легко
                  возвратить.

           FMR_OWN_METADATA
                  Данная зона является метаданными файловой системы.

       У XFS имеются следующие специальные значения владельца:

           XFS_FMR_OWN_FREE
                  Свободное место.

           XFS_FMR_OWN_UNKNOWN
                  Данная зона используется, но её владелец  не  известен  или  его  нельзя  легко
                  возвратить.

           XFS_FMR_OWN_FS
                  Статические  метаданные  файловой системы, находящиеся по постоянному адресу. К
                  ним относятся: суперблок AG, заголовки AGF, AGFL и AGI.

           XFS_FMR_OWN_LOG
                  Журнал файловой системы.

           XFS_FMR_OWN_AG
                  Выделение группы метаданных, например B-деревья свободного  места  и  B-деревья
                  отображения.

           XFS_FMR_OWN_INOBT
                  B-деревья инод и свободных инод.

           XFS_FMR_OWN_INODES
                  Записи инод.

           XFS_FMR_OWN_REFC
                  Информация о счётчике ссылок.

           XFS_FMR_OWN_COW
                  Эта зона используется для организации копирования при записи.

           XFS_FMR_OWN_DEFECTIVE:
                  Данная   зона   помечена  как  испорченная  или  файловой  системой  или  самим
                  устройством.

       У ext4 имеются следующие специальные значения владельца:

           EXT4_FMR_OWN_FREE
                  Свободное место.

           EXT4_FMR_OWN_UNKNOWN
                  Данная зона используется, но её владелец  не  известен  или  его  нельзя  легко
                  возвратить.

           EXT4_FMR_OWN_FS
                  Статические  метаданные  файловой системы, находящиеся по постоянному адресу. К
                  ним относятся суперблок и групповые дескрипторы.

           EXT4_FMR_OWN_LOG
                  Журнал файловой системы.

           EXT4_FMR_OWN_INODES
                  Записи инод.

           EXT4_FMR_OWN_BLKBM
                  Битовая карта блоков.

           EXT4_FMR_OWN_INOBM
                  Битовая карта инод.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       В случае ошибки возвращается -1, а errno устанавливается в значение ошибки.

ОШИБКИ

       Значениями errno могут быть (и не только эти):

       EBADF  Дескриптор fd не открыт на чтение.

       EBADMSG
              Файловая система обнаружила ошибку контрольной суммы в метаданных.

       EFAULT Переданный  указатель отображает недопустимый адрес памяти.

       EINVAL Недостаточный размер массива, ключи  не  указывают  на  корректную  часть  файловой
              системы,  низший  ключ  указывает  на  более  высокое место в адресном пространстве
              физического хранилища файловой системы  чем  высший  ключ  или  передано  ненулевое
              значение в одном из полей, где должен быть ноль.

       ENOMEM Недостаточно памяти для выполнения запроса.

       EOPNOTSUPP
              Файловая система не поддерживает данную команду.

       EUCLEAN
              Метаданные файловой системы повреждены и требуют починки.

ВЕРСИИ

       Операция FS_IOC_GETFSMAP впервые появилась в Linux 4.12.

СТАНДАРТЫ

       Данный  программный  интерфейс существует только в Linux. Его поддерживают не все файловые
       системы.

ПРИМЕРЫ

       Пример программы смотрите в io/fsmap.c из дистрибутива xfsprogs.

СМ. ТАКЖЕ

       ioctl(2)

ПЕРЕВОД

       Русский   перевод   этой    страницы    руководства    был    сделан    Azamat    Hackimov
       <azamat.hackimov@gmail.com>,    Dmitriy   S.   Seregin   <dseregin@59.ru>,   Yuri   Kozlov
       <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если вы обнаружите ошибки в переводе  этой  страницы  руководства,  пожалуйста,  отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.