Обложка канала

ServerAdmin.ru

12437 @srv_admin

Авторская информация о системном администрировании.

ServerAdmin.ru

4 года назад
Открыть в
Продолжаю ваc знакомить с утилитами командной стоки Linux, которыми пользуюсь сам. На днях вспомнил про SPLIT. С её помощью можно делить файлы на части. Чаще всего это нужно для больших архивов, которые требуется разбиться на части перед передачей по интернету. Так проще передать большой файл. Я не помню, чтобы мне приходилось когда-нибудь ставить split отдельно. Обычно она есть в стандартном системном наборе во всех дистрибутивах, с которыми приходится работать. Конкретно я split использую, когда нужно отправить в S3 хранилище какой-то большой архив. Во многих инструкциях по S3 указывается, что большие файлы отправлять не рекомендуется. Под большими подразумевается что-то больше 2-3 Гигабайт. Так что такие файлы приходится разбивать. В общем случае разбить файл с помощью split можно следующим образом: # split -b 100M file На выходе получим некоторый набор файлов в зависимости от размера исходного. Имена у файлов будут вида xaa, xab, xaс и т.д., что явно неудобно. Поэтому на практике лучше сразу указать маску, по которой будут создаваться новые файлы: # split -b 2M file file_ -a 2 -d Мы указали длину префикса 2 и использование чисел. На выходе будут файлы file_00, file_01, file_02 и т.д., что мне видится удобнее дефолтных масок. Собрать файлы обратно можно следующим образом: # cat file_* > file Если вы просто хотите разделить файл на 5 частей вне зависимости от того, какого они будут размера, то делается это следующим образом: # split -n 5 file file_ -a 2 -d Вот пример использования split на бэкапе большого сайта для дальнейшей передачи его в S3. Пример условный, так как вынул его из большого скрипта и все переменные указал явно. То есть это не мой окончательный рабочий вариант, а адаптированный пример: # Делаем архив с относительным путём внутри /usr/bin/tar --exclude='cache/*' \ -czvf /mnt/backup/site.ru_`date +"%Y-%m-%d_%H-%M"`.tar.gz \ -C /web/sites/site.ru www # Разбиваем архив на части /usr/bin/split -b 2048m \ /mnt/backup/site.ru_`date +"%Y-%m-%d_%H-%M"`.tar.gz \ "/mnt/backup/site.ru_`date +"%Y-%m-%d_%H-%M"`.tar.gz-part-" # Удаляем исходный файл /usr/bin/rm -rf /mnt/backup/site.ru_`date +"%Y-%m-%d_%H-%M"`.tar.gz # Заливаем в S3 /usr/bin/rclone copy /mnt/backup s3storage:week # Чистим локальный бэкап от старых архивов /usr/bin/find /mnt/backup -type f -mtime +7 -exec rm {} \; Отдельно отмечу, что подобные бэкапы обязательно нужно проверять. У меня S3 это не основной бэкап, а холодное хранилище для них. Эти же бэкапы хранятся где-то ещё, разворачиваются и проверяются, так как туда ещё и дамп базы обычно кладётся, чтобы всё в одном месте было. #terminal #bash