Нужен совет по поводу tar

12
M2
На сайте с 11.01.2011
Offline
342
1073

Здравствуйте,

Занимаюсь архивированием одной папки на сервере. В ней хранится вся почта. Проблема в том, что размер папки достиг 7 гигабайт, а количество файлов в ней - порядка 30000. Из-за этого (а, возможно, и нет) я не могу выполнить архивацию до конца. tar отрабатывает нормально, но не до конца - рвется соединение с самим сервером с сообщением "packet write wait, broken pipe".

Понимаю, что в этом случае может быть проще было бы делать инкрементальный backup с помощью rsync на отдельный сервер. Но у меня уже есть архивы в tar.gz, которые все лежат в определенном месте (мной проплаченном). Хотелось бы, чтобы и почта была там.

Что делал:


/root/.ssh/config
ServerAliveInterval 0

/etc/ssh/sshd_config
ClientAliveInterval 0

Не помогало, увеличил 0 до аномально больших цифр - всё равно не помогает.

Знающие люди, подскажите пожалуйста, куда копать. Заранее спасибо!

------------------- Крутые VPS и дедики. Качество по разумной цене ( http://cp.inferno.name/view.php?product=1212&gid=1 ) VPS25OFF - скидка 25% на первый платеж по ссылке выше
LEOnidUKG
На сайте с 25.11.2006
Offline
1722
#1

Рвётся соединение? Вы через что пытаетесь команду запустить то?

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
fliger
На сайте с 17.09.2015
Offline
106
#2

Разделите папку на подпапки (по первому символу в названии файла), а потом архивируйте каждую подпапку.

a.tar

b.tar

c.tar

...

z.tar

0.tar

1.tar

2.tar

...

9.tar

M2
На сайте с 11.01.2011
Offline
342
#3

LEOnidUKG,

Команда запускается прямо с сервера, к которому я подсоединяюсь по ssh.

fliger,

Вы имеете в виду, разделить средствами tar? Чтобы каждый архив имел определенный размер? Или что-то другое? Физически делить папку не могу, т.к.там подпапки на почтовые адреса, служебные папки... всё на postfix/dovecot завязано. Папка - как она есть. Только если средствами самого архиватора как-то разделить.

cloud-shield
На сайте с 25.01.2017
Offline
54
#4

Запустите команду архивации через screen и даже при потере связи она продолжит свою работу.

Защита сайтов от DDoS атак - Cloud-Shield.ru ( https://cloud-shield.ru )
kxk
На сайте с 30.01.2005
Offline
970
kxk
#5

mark2011, А почему не используете Duplicity?

Ваш DEVOPS
S
На сайте с 11.05.2018
Offline
7
#6

Используйте терминальный мультиплексор, например tmux(есть так же screen, но tmux посовременнее)

https://ru.wikipedia.org/wiki/Tmux

https://wiki.archlinux.org/index.php/Tmux_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)

С ним вам будет абсолютно пофиг на разрывы соединений ибо вы всегда сможете переподключится к мультиплексору

Вкратце вот инструктаж после его установки:

1. Подключаетесь через ssh к серверу, выполняете команду tmux и попадаете в терминал мультиплексора, там уже запускаете создание бекапа, а дальше можете вообще закрывать ssh сессию

2. Вы закрыли ssh сессию или она оборвалась, подключайтесь заново по ssh и введите tmux attach, вы попадете в ту же консоль, которая была до обрыва или отключения

M2
На сайте с 11.01.2011
Offline
342
#7

cloud-shield, swank,

спасибо за отличные советы! :)

cloud-shield, начал использовать screen - это именно то, что нужно в моей ситуации! Спасибо огромное, тему можно считать исчерпанной.

redeyer
На сайте с 27.01.2010
Offline
102
#8

Да, screen хорошо помогает в такой ситуации.

Но есть и более нативные способы. Например, если нет возможности его поставить или использовать, или по какой-то другой причине (например лень), то любые процессы можно запускать сразу в фоновом режиме, это ещё более простой метод.

Есть два варианта:

1. Запустить команду архивации сразу в фон, для этого нужно поставить знак амперсанда на её конце.

tar zcf backup.tar.gz  folder/ & 

2. Если команда уже запущена, выполнена половина, и тут вам нужно отвлечься либо перехватить консоль для дальнейшей работы, можно отправить в фон уже запущенный процесс. Для этого приостанавливаете процесс комбинацией клавиш Ctrl+Z. Это пауза, заморозка процесса на любой стадии выполнения.

Затем даете команду

bg

Она отправляет приостановленный только что процесс в фон.

Второй способ бывает полезен, когда нужно передать какие-то аргументы процессу, по запросу, например пароль (при запуске сразу в фоне такой возможности обычно нет). Например запустить процесс копирования большого количества файлов между серверами по ssh. Запустили как обычно, он запросил пароль к удаленному серверу, вы его ввели, началось копирование. Теперь приостанавливаете, и отправляете в бэкграунд этот процесс. После можно даже отключаться от сервера, процесс продолжит работу.

Потом вернетесь и проверите. Как? Через просмотр наличия/отсутствия процесса в ps, например.

Ах да, в обоих случаях процесс можно вытащить из фона обратно командой fg

Услуги сисадмина. Настройка и оптимизация VPS https://searchengines.guru/ru/forum/928318 . Поднятие своих прокси, восстановление сайтов из вебархива. Мой канал о хостингах https://t.me/hostingexpert
M2
На сайте с 11.01.2011
Offline
342
#9

Пардон, ещё раз поднимаю темку.

Дело вот в чём. Если я запускаю команду через screen, всё нормально, всё работает. Но у меня-то была идея всё это дело выполнять по крону. Ну и вот... сделал соответствующую запись, но она не выполнилась. Смотрю - а мне сообщение "Must be connected to a terminal".

Я как бы знаю, что это такое :) но не могу понять причину появления такой записи. Погуглил - люди советуют сначала запустить такое:


script /dev/null

тоже не очень понимаю, к чему это приведет.

redeyer, ваш вариант не приведёт к описанному выше? Как думаете? Я сейчас, конечно, запустил процесс вручную, и он работает, но всё равно, хотелось бы, чтобы всё по крону делалось.

vga1
На сайте с 18.02.2007
Offline
251
#10

Запускайте сразу в фоне командой nohup, результат выполнения можно контролировать в логе nohup.log. При выходе из терминалки процесс не прервется.

nohup tar param > nohup.log &

tar с какими параметрами запускаете?

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий