резервирование дискового пространства перед копированием файлов

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

file=/path/to/the/file
n=$(( $(wc -l < "$file") - 50 ))
[[ $n -gt 0 ]] && sed -i 1,${n}d "$file"

Тяжелая работа выполняется (GNU) sed с функцией -i «редактирование на месте», которая работает под обложками, создавая выходные данные во временном файле. Остальные строки настраивали математику для операции sed, а именно:

  1. подсчитывайте строки в файле (wc), затем вычитайте 50; присвойте это n.
  2. , если n положительный, выполните команду sed, чтобы удалить строки с 1 по n.
3
07.03.2017, 19:56
2 ответа

Если вы будете придерживаться инструментов, не зависящих от файловой системы, я не могу придумать, как это сделать, кроме фактического выделения дискового пространства, т.е. резерв будет необходимо создать (не разреженный!) файл требуемого размера, и вам нужно будет удалить этот файл перед запуском rsync .

Если файлы находятся на томе ext2 / ext3 / ext4 и использование корневого доступа для некоторых операций допустимо, вы можете использовать его зарезервированное пространство .Зарезервированное пространство обычно предназначено для root, но вместо этого вы можете сделать его доступным другому пользователю или другой группе. Запустите процесс rsync от имени этого пользователя / группы и настройте зарезервированное пространство с помощью tune2fs -m перед запуском rsync.

Возможно, есть более гибкое решение с пулами ZFS или Btrfs, но я не знаю, как это сделать.

2
27.01.2020, 21:27

Квоты и связанные с ними инструменты — один из способов добиться этого.

https://linux.die.net/man/1/quota

lvextend и друзья — еще один вариант

https://linux.die.net/man/8/lvextend

0
13.02.2020, 23:54

Теги

Похожие вопросы