Как надежно проверить с помощью ZFS, хранится ли XATTR с использованием SA или DIR для некоторых файлов?

Вопрос или проблема

У меня есть несколько наборов данных с использованием XATTR=ON в прошлом, которые фактически соответствовали LEGACY/DIR, и я мигрировал их на XATTR=SA сейчас по причинам производительности. Большинство этих изменений свойства вступают в силу только для вновь записанных данных, а файлы в наборах данных регулярно по крайней мере обновляются с помощью RSYNC во время резервного копирования.

Как мне проверить текущую схему хранения, используемую на диске для XATTR?

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

zdb -dddd <набор данных> <инод>

root@srv01:/zpool-hdd/encr# touch test.txt
root@srv01:/zpool-hdd/encr# stat test.txt
  Файл: test.txt
  Размер: 0               Блоков: 1          IO Блок: 131072 обычный
пустой файл
Устройство: 0,60    Инод: 5           Ссылки: 1
Доступ: (0644/-rw-r--r--)  Уд: (    0/    root)   Гид: (    0/    root)
Доступ: 2024-11-29 17:39:19.604863843 +0100
Изменено: 2024-11-29 17:39:19.604863843 +0100
Изменено: 2024-11-29 17:39:19.604863843 +0100
 Рождение: 2024-11-29 17:39:19.604863843 +0100
root@srv01:/zpool-hdd/encr# zdb -ddddddd zpool-hdd/encr 5
Набор данных zpool-hdd/encr [ZPL], ID 37543, cr_txg 750114, 216K, 10
объектов, rootbp DVA[0]=<0:fb29d447000:1000> DVA[1]=<0:e8951e4b000:1000>
[L0 DMU objset] fletcher4 без сжатия аутентифицированный LE непрерывный
уникальный двойной размер=1000L/1000P рождение=1268365L/1268365P заполнение=10
cksum=00000024b0170731:00006736da953e0f:009984adba612070:9f9b98f2774578d7

    Объект  уровень   iblk   dblk  dsize  dnsize  lsize   %полный  тип
         5    1   128K    512      0     512    512    0.00  ZFS
обычный файл (K=унаследовать) (Z=унаследовать=lz4)
                                               176   бонус  Системные
атрибуты
        флаги dnode: USERUSED_ACCOUNTED USEROBJUSED_ACCOUNTED
        dnode maxblkid: 0
                (бонус зашифрован)
                (объект зашифрован)
Косвенные блоки:

root@srv01:/zpool-hdd/encr# setfattr -n user.comment -v "это комментарий" test.txt
root@srv01:/zpool-hdd/encr# zdb -ddddddd zpool-hdd/encr 5
Набор данных zpool-hdd/encr [ZPL], ID 37543, cr_txg 750114, 216K, 10
объектов, rootbp DVA[0]=<0:fb29d447000:1000> DVA[1]=<0:e8951e4b000:1000>
[L0 DMU objset] fletcher4 без сжатия аутентифицированный LE непрерывный
уникальный двойной размер=1000L/1000P рождение=1268365L/1268365P заполнение=10
cksum=00000024b0170731:00006736da953e0f:009984adba612070:9f9b98f2774578d7

    Объект  уровень   iblk   dblk  dsize  dnsize  lsize   %полный  тип
         5    1   128K    512      0     512    512    0.00  ZFS
обычный файл (K=унаследовать) (Z=унаследовать=lz4)
                                               176   бонус  Системные
атрибуты
        флаги dnode: USERUSED_ACCOUNTED USEROBJUSED_ACCOUNTED
        dnode maxblkid: 0
                (бонус зашифрован)
                (объект зашифрован)
Косвенные блоки:

root@srv01:/zpool-hdd/encr# 

Ответ или решение

Проверка способа хранения XATTR в ZFS: SA или DIR

Проверка, как именно хранятся расширенные атрибуты (XATTR) в файловой системе ZFS, требует внимательного подхода, особенно если у вас есть данные, которые ранее использовали режим XATTR=LEGACY/DIR и были мигрированы в XATTR=SA. В данном ответе мы обсудим, как можно надежно установить, какая методология хранения используется для определенных файлов.

Шаг 1: Понимание режимов хранения XATTR

В ZFS существуют два основных режима хранения XATTR:

  • LEGACY (DIR): Расширенные атрибуты хранятся в отдельных файлах в подкаталоге .ZFS. Этот метод имеет свои преимущества, но может снижать производительность из-за дополнительных операций ввода-вывода.
  • SA (System Attribute): Расширенные атрибуты хранятся в буфере с данными файла, что улучшает производительность за счет уменьшения числа операций обращения к диску.

Для новых файлов режим хранения будет определяться настройкой xattr на уровне файловой системы, но для уже существующих файлов эта настройка может не быть применена.

Шаг 2: Использование ZDB для анализа хранилища

Использование команды zdb поможет вам глубже проанализировать, как именно хранятся XATTR для определенной группы файлов. Ваша команда zdb -dddd &lt;dataset&gt; &lt;inode&gt; позволяет получить информацию о конкретном иноде, но если вы не видите изменений или расширенных атрибутов, проблема может заключаться в том, что они не были обновлены в метаданных.

Пример использования ZDB:

  1. Создайте файл и добавьте к нему расширенные атрибуты:

    touch test.txt
    setfattr -n user.comment -v "this is a comment" test.txt
  2. Проверьте inode файла:

    stat test.txt
  3. Выполните команду ZDB для получения информации о inode:

    zdb -dddd zpool-hdd/encr <inode>

Шаг 3: Интерпретация результата

На основе вывода ZDB вы сможете увидеть тип объема, используемый для хранения атрибутов. В выводе вы ищете строчку:

176   bonus  System attributes

Если там указано bonus, это может означать, что расширенные атрибуты хранятся в режиме SA. Если они указаны как legacy, это будет указывать на использование режима DIR.

Шаг 4: Проверка существующих файлов

Так как ваши данные могли быть обновлены с помощью RSYNC без изменения XATTR, вам необходимо повторно проверить XATTR для уже существующих файлов. Если они были созданы до переключения в SA и не были изменены, они могут по-прежнему использовать режим DIR.

Для проверки всех файлов в директории вы можете написать скрипт на Bash, который будет использовать stat и zdb для анализа каждого файла на предмет его хранения XATTR.

Заключение

Для надежной проверки, используете ли вы SA или DIR для хранения XATTR, следуйте описанным шагам. Будьте внимательны, что если ваши данные были скопированы или мигрированы, информация может измениться в зависимости от способа, которым файловая система обрабатывает XATTR. Использование zdb предоставляет вам мощный инструмент для анализа, но важно также понимать, что текущее состояние файлов и их атрибутов может быть сложным из-за изначальных настроек и изменений, сделанных в процессе их использования.

Помните, что модификация старых данных может потребовать дополнительных действий, таких как изменение метаданных файлов для приведения их в соответствие с новыми настройками вашей ZFS.

Оцените материал
Добавить комментарий

Капча загружается...