Очистка разреженного сценария
Я использую машину времени для резервного копирования некоторых серверов в разреженный комплект образов дисков, и я хотел бы иметь скрипт для очистки старых резервных копий и изменения размера образа после освобождения места. Я совершенно уверен, что данные защищены, потому что если я удаляю старые резервные копии, щелкая правой кнопкой мыши, я должен ввести пароль, чтобы иметь возможность удалить их. Чтобы мой сценарий мог их удалить, я запускаю его как root. По какой-то причине он просто не запускается, и каждый файл, который он пытается удалить, я получаю
rm: /file/: Operation not permitted
Вот что у меня есть в качестве сценария:
#!/bin/bash
for server in servername; do
/usr/bin/hdiutil attach -mountpoint /path/to/mountpoint /path/to/sparsebundle/$server.sparsebundle/;
/bin/sleep 10;
/usr/bin/find /path/to/mountpoint -type d -mtime +7 -exec /bin/rm -rf {} \;
/usr/bin/hdiutil unmount /path/to/mountpoint;
/bin/sleep 10;
/usr/bin/hdiutil compact /path/to/sparsebundle/$server.sparsebundle/;
done
exit;
Одна из проблем, которая, как я думал, была причиной этого, заключалась в том, что ей нужно было указать точку монтирования, так как по умолчанию монтировалось в /Volumes/Time\ Machine\ Backups/, поэтому я создал точку монтирования. Я также подумал, что он пытается быстро удалить файлы после монтирования, и он еще не был смонтирован, поэтому я добавил режим сна. Я также пытался использовать -delete
вариант для поиска вместо -exec
, но это не имело никакого значения.
Любая помощь по этому вопросу будет принята с благодарностью, потому что у меня нет идей, почему это не сработает.
2 ответа
Во-первых, такое сокращение резервных копий - действительно очень плохая идея. Во-первых, когда вы используете Find's -mtime
проверить каталог, вы проверяете последний раз, когда каталог был изменен; Вам нужно проверить, когда в последний раз что-то в этом каталоге было изменено. Например, прошло 10 дней с тех пор, как / (корневой каталог) на моем Mac был изменен, поэтому, если бы я использовал ваш скрипт в своей резервной копии (и это сработало), он удалил бы весь загрузочный том из всех резервных копий (включая последнюю один).
Во-вторых, вы возитесь с тщательно организованной структурой резервного копирования Time Machine, которая может эффективно повредить резервную копию (включая даже будущие резервные копии). Не делайте этого.
(Примечание: каждый раз, когда вы видите команду rm
особенно с последующим -Rf
особенно при запуске от имени пользователя root, прежде чем нажать клавишу возврата, убедитесь, что знаете, на что он указывает.)
Теперь, что касается реальной проблемы, я подозреваю, что вы работаете с сетью безопасности Time Machine, расширением ядра, которое пытается предотвратить повреждение резервных копий TM. Это хорошая вещь (см. Последний пункт), и вы не должны ее отключать.
Однако есть простое решение: использовать Time Machine. В частности, использовать tmutil delete /path/to/snapshot
удалить старые снимки. Путь к снимку будет примерно таким /path/to/mountpoint/Backups.backupdb/<servername>/<YYYY-MM-DD-HHMMSS>
,
Обратите внимание, что при удалении старых снимков фактически удаляются только файлы, которые не передаются другим снимкам; поэтому, если вы удаляете все снимки старше недели, вы не избавляетесь от (резервных копий) файлов, которые не были изменены в течение недели, вы избавляетесь от файлов, которые были удалены более недели назад. Который гораздо чаще, чем вы хотите...
Хотя это старый поток, следует отметить, что резервные копии в комплекте машины времени являются не копиями, а скорее ссылками на файлы (с использованием жестких ссылок), это означает, что если файл не изменился, то копия файла займет всего несколько байтов, поэтому если вы видите несколько копий файла, это не означает, что они все используют физическое пространство.
с ( этот сайт о том, как работает машина времени) ---------
Когда Time делает вашу первую резервную копию, он копирует все (кроме некоторых системных файлов, мусора и т. Д.). Он также создает устаревшую резервную копию и помещает в нее жесткие ссылки на все резервные копии, которые он только что сделал. Затем, когда Time Machine делает вторую резервную копию, она копирует все, что изменилось со времени первой резервной копии, создает другую устаревшую папку резервной копии и помещает в нее жесткие ссылки на новые элементы резервной копии. Все идет нормально.
Но вот хитрость: он также помещает жесткие ссылки во второй папке резервной копии на элементы, которые не изменились. Таким образом, папка теперь содержит ссылки на все, что было в вашей системе во время второго резервного копирования.