Я хочу удалить каталог с большими объемами данных. Это мой резервный массив, который представляет собой файловую систему ZFS с линейным диапазоном и одним пулом под названием «san». Сан установлен, /san
поэтому я хочу массово удалить / san / thispc / sureFolder
$ du -h -d 1 certainFolder/
1.2T certainFolder/
Вместо того, чтобы ждать, rm -rf certainFolder/
не могу ли я просто уничтожить дескриптор этого каталога, чтобы он мог перезаписываться (даже с тем же именем dir, если я решил воссоздать его) ??
Так, например, если вы не знаете много о zfs fs internal mgmnt, в частности, о том, как он отображает каталоги, но если я обнаружу, что карта скажет, например, например, и удалила правильные записи, например, каталог больше не будет отображаться, и то пространство, которое ранее содержал каталог должен быть удален из некоторого вида аудита.
Есть ли простой способ сделать это, даже если на ext3 fs, или это уже то, что команда рекурсивного удаления должна делать в первую очередь, то есть воровать и редактировать журналы?
Я просто надеюсь сделать что-то вроде того, kill thisDir
где он просто удаляет какой-то идентификатор, и poof каталог больше не отображается, ls -la
а данные все еще остаются на диске, но пространство теперь будет использоваться повторно ( перезаписано), потому что ZFS это просто круто?
Я имею в виду, я думаю, что ZFS действительно круто, как мы можем это сделать? Идеально? потирая руки вместе :-)
Мой конкретный вариант использования (помимо моей любви к zfs) - это управление моим резервным архивом. Эта папка для резервного копирования отправляется через freefilesync (AWESOME PROG) на моем компьютере с Windows на общий файловый ресурс smb, но также имеет каталог версий, куда идут старые файлы. Я удаляю каталоги верхнего уровня, которые находятся в основной резервной копии, которые были скопированы в версию - например /san/version/someStuff
, как очистка rm -rf /san/version/someStuff/*
терминала из замазки два раза в месяц , теперь я должен открыть другой терминал; Я не хочу делать это каждый раз, мне надоело бесполезно контролировать rm -rf.
Я имею в виду, может быть, я должен установить команду, чтобы просто освободить дескриптор, а затем вывести на стандартный вывод, что может быть хорошо. Более реалистично , воссоздать набор данных через несколько секунд zfs destroy san/version; zfs create -p -o compression=on san/version
после мыслей из ответа @Gilles.
zfs create dataset -p -o compression=on yourPoolName/BackupRootDir/hostNameYourPc/somesubdir
Ответы:
Отслеживание освобожденных блоков неизбежно в любой достойной файловой системе, и ZFS не является исключением . Однако в ZFS существует простой способ почти мгновенного удаления каталогов путем «отсрочки» очистки. Технически это очень похоже на предложение Жиля, но по своей сути надежно, не требуя дополнительного кода.
Если вы создадите снимок вашей файловой системы перед удалением каталога, удаление каталога будет очень быстрым, потому что в нем ничего не нужно исследовать / освобождать, и на него все еще ссылается снимок. Затем вы можете уничтожить снимок в фоновом режиме, чтобы пространство постепенно восстанавливалось.
источник
feature@async_destroy
может также помочь ускорить это (с точки зрения пользователя или администратора), если включено; смzpool get all $pool
. Обратите внимание, что, по крайней мере, последний раз, когда я смотрел, если при импорте из пула происходит незавершенное уничтожение , то это уничтожение становится синхронным, и импорт из пула не завершится, пока не завершится уничтожение. Остерегайтесь, если вам нужно перезагрузить компьютер!То, что вы просите, невозможно. Или, точнее, стоит заплатить за удаление каталога и его файлов; если вы не заплатите в момент удаления, вам придется заплатить в другом месте.
Вы не просто удаляете каталог - это было бы почти мгновенно. Вы удаляете каталог и все файлы внутри него, а также рекурсивно удаляете все его подкаталоги. Удаление файла означает уменьшение его количества ссылок, а затем пометить его ресурсы (блоки используют для содержимого файла и метаданных файла, и индекс, если файловая система использует таблицу индексов) как свободные, если число ссылок достигает 0, а файл не открытый. Это операция, которая должна выполняться для каждого файла в дереве каталогов, поэтому время, которое требуется, по крайней мере, пропорционально количеству файлов.
Вы можете отложить стоимость маркировки ресурсов как бесплатных. Например, существуют сборочные файлы, где вы можете удалить каталог, не удаляя содержащиеся в нем файлы. Запуск сборщика мусора обнаружит файлы, недоступные через структуру каталогов, и пометит их как свободные. Работа
rm -f directory; garbage-collect
с файловой системой, собираемой мусором, делает то же самое, что иrm -rf
в традиционной файловой системе с разными триггерами. Файловых систем, собираемых мусором, немного, потому что сборщик мусора представляет собой дополнительную сложность, которая редко требуется. Время GC может наступить в любой момент, когда файловой системе нужны какие-то свободные блоки и они не найдены, поэтому производительность операции будет зависеть от прошлой истории, а не только от операции, которая обычно нежелательна. Вам нужно запустить сборщик мусора, чтобы получить фактическое количество свободного места.Если вы хотите смоделировать поведение GC на нормальной файловой системе, вы можете сделать это:
(Я пропустил много важных деталей, таких как проверка ошибок, устойчивость к потере питания и т. Д.). Имя каталога сразу же становится несуществующим; пространство восстанавливается постепенно.
Другой подход, позволяющий избежать оплаты стоимости при удалении без GC, состоит в том, чтобы оплачивать ее во время распределения. Отметьте дерево каталогов как удаленное и просматривайте удаленные каталоги при распределении блоков. Это было бы трудно согласовать с жесткими ссылками, но в файловой системе без жестких ссылок это можно сделать с O (1) увеличением затрат на распределение. Однако это сделало бы очень распространенную операцию (создание или увеличение файла) более дорогой, с единственным преимуществом - относительно редкая операция (удаление большого дерева каталогов) дешевле.
Вы можете массово удалить дерево каталогов, если это дерево хранится как его собственный пул блоков. (Примечание: я использую слово «пул» в значении, отличном от «пула хранения» ZFS. Я не знаю, какова правильная терминология.) Это может быть очень быстро. Но что вы делаете со свободным пространством? Если вы переназначаете его в другой пул, это будет стоить, хотя и намного меньше, чем удаление файлов по отдельности. Если вы оставите пространство как неиспользованное резервное пространство, вы не сможете немедленно его вернуть. Наличие отдельного пула для дерева каталогов означает дополнительные затраты на увеличение или уменьшение размера этого пула (на лету или явно). Создание дерева как своего собственного пула хранения также увеличивает стоимость перемещения файлов в дерево и из дерева.
источник
zfs list
. До тех пор, надеясь, что кто-то еще получит информацию о том, как выполнить массовое деление на ZFS в подкаталоге пула. :-)Если это должно быть быстро, я создаю новый временный каталог,
mv
каталог под ним, а затем рекурсивно удаляю временный каталог :источник
rm
команда не завершается по какой-либо другой причине, каталог-фантом остается не восстановленным.&
просто создает фон для процесса, поэтому вы можете продолжать выполнять другие действия в той же оболочке, пока выполняется удаление (с учетом любых соответствующих ограничений производительности).