Стирание содержимого родительского набора данных без уничтожения дочерних?

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

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

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

Какой лучший вариант полностью очистить родительский набор данных?

Ранее, когда я делал что-то подобное, я просто монтировал родителя по отдельности и удалял из него всё, но я обнаружил, что ZFS все еще показывает 200 МБ как referenced и logicalreferenced, несмотря на то, что в наборе данных не осталось ничего (включая скрытые файлы). В другом наборе данных, который я очищал, было всего около 17 МБ, но оба имели примерно одинаковое количество дочерних наборов данных, что показалось мне странным – что могло все еще ссылаться ZFS в большем из двух?

Ни один из этих наборов не имеет снимков (кроме временных для отправки, я использовал закладки, чтобы сохранить точку для отправки). Влияет ли usedbydataset на размер дочерних наборов? Я бы не ожидал, что это так, но “очищенный” родитель с наибольшим значением referenced действительно имеет значительно больше дочерних наборов из двух.

Существует ли другой способ “очистить” набор данных так, чтобы он не содержал ничего, кроме его свойств и минимально необходимого для дочерних наборов?

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

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

Шаги для очистки родительского набора данных

  1. Проверьте существующие ссылки и характеристики:
    Перед тем как приступать к очистке, проведите анализ родительского набора данных, используя команды:

    zfs list -o name,used,available,referenced,logicalreferenced
    zfs get all <имя_родительского_набора_данных>

    Это поможет вам понять текущее состояние. Обратите внимание на параметры used, referenced, и usedbydataset, чтобы увидеть, какие данные могут использоваться.

  2. Удаление содержимого:
    Чтобы удалить все содержимое в родительском наборе данных, подходите к этому с осторожностью. Лучше всего использовать команду:

    zfs destroy -r <имя_родительского_набора_данных>@<snapshot>

    Если у вас нет снимков, используйте:

    cd /путь/к/родительскому/набору;
    rm -rf *

    Убедитесь, что у вас нет ни видимых, ни скрытых файлов, затем проверьте:

    ls -la
  3. Проблема с ‘referenced’:
    ZFS использует функции дедупликации и сжатия, что может быть причиной оставшихся ссылок даже после удаления всех файлов. Команда zfs list может показывать оставшийся объем под referenced, потому что родительский набор может сохранять некоторую метаинформацию о его дочерних наборах данных.

    Чтобы понять, откуда берутся оставшиеся ссылки, попробуйте:

    zfs get all <имя_родительского_набора_данных>
    zfs list -t snapshot

    Проверьте наличие любых скрытых снимков или метаданных.

  4. Удаление скрытых данных:
    Если у вас есть неожиданные ссылки, попробуйте удалить их, используя:

    zfs destroy <имя_родительского_набора_данных>/<дочерний_набор_данных>@<snapshot>

    Убедитесь, что вы не удаляете важные данные дочерних наборов.

  5. Проверка дочерних наборов:
    Убедитесь, что дочерние наборы данных не указывают на содержимое родительского. Это можно сделать с помощью следующей команды:

    zfs get usedbydataset <имя_дочернего_набора>

Заключение

Если у вас нет никаких детальных требований к содержимому родительского набора данных, лучший способ его "очистки" — это удалить все данные и метаданные, оставив только необходимые свойства. Если после всех действий остаются ненужные ссылки, возможно, вам стоит рассмотреть возможность создания нового родительского набора данных и перемещения дочерних наборов данных под него. Это обеспечит чистоту структуры с минимальным воздействием на ваши текущие данные.

Этот процесс может быть сложным, поэтому всегда имеет смысл делать резервные копии перед выполнением операций, которые могут повлиять на данные.

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

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