LINUX.ORG.RU
решено ФорумTalks

Бекапилка вашего ПекА

 , , , ,


2

2
- АХТУНГ, ВАХТУНГ, БАХТУНГ, ДРЯХТУНГ, АЛЯРМ, ВНИМАНИЕ
- ЭТОТ СКРИПТ ПРЕДОСТАВЛЯЕТСЯ КАК ЕСТЬ, Я НЕ НЕСУ НИКАКОЙ
- ОТВЕТСТВЕННОСТИ ЯВНОЙ ИЛИ КОСВЕННОЙ, ВАМ ЛИБО КОМУ ТО ЕЩЁ
- ПО ПРИЧИНЕ, ПОРЧИ И/ИЛИ УНИЧТОЖЕНИИ ВАШИХ ДАННЫХ 
- ЕСЛИ ВЫ НЕСОГЛАСНЫ, Я ЗАПРЕЩАЮ ВАМ ЗАПУСКАТЬ ЭТОТ КОД
- ДЕЙСТВУЙТЕ НА СВОЙ СТРАХ И РИСК, ВАШИ ЛЮБЫЕ СОМНЕНИЯ 
- КАСАТЕЛЬНО СКРИПТА ДОЛЖНЫ ВЕСТИ К ОТКАЗУ ОТ ЕГО ИСПОЛЬЗОВАНИЯ

Всё, теперь если у вас что-то пойдёт не так, то я чист.
И меня никто не будет ругать, гы :) Просто будте внимательный с тем,
какой каталог указывается для сохранения бекапов. А то ведь так и затереть чего важного можно случайно.
Вопщем решил поделится прост. Пусть будет.

Простой скрипт ручного бекапа наиболее важных файлов, использует
rsync и zip Настройка производится внутри стрипта. Описание
настройки бекапа тоже распологается внутри скрипта.
Типичное использование это ручной запуск в конце дня или по
завершению какой либо важной работы или перед сном :)
Используйте для бекапа, отдельный диск где нет ничего кроме бекапа!
Просто иначе, в бекапе нет никакого смысла.
Лично я просто на панельку кнопочку сделал, и перед отплытием в люльку тыкаю кнопочку.
Комп я не выключаю обычно, а если выключаю до явно дожидаюсь окончания бекапа, не проверял что будет если увести в сон во время бекапа, так что, лучше дождаться окончания.

Зависимости

mkdir zip rsync notify-send lua

Использование

Настроить скрипт, после чего просто его запускать. Так как вам удобно.

  • Обязательные параметры
    • source каталог или файл источник
    • dest каталог приёмник
  • Дополнительные параметры
    • secure применить пароль (требуется zip=true)
    • zip сжать в архив
    • mirror сделать точную копию и обновить им текущий каталог бекапа( или архив если zip=true)
    • versions сделать точную копию и пометить датой в отдельном каталоге (или архиве если zip=true)

Пример поля конфигурации:

  • {secure=true, zip=true, versions=true, source='~/.ssh/', dest='ssh'};

Значит что нужно сделать рекурсивный бекап каталога с ключами ssh и расположить бекап в каталоге с именем ssh. secure=true означает что данные будут запаролены, а zip что будут сжаты, versions=true означает что каждый новый бекап будет создавать новую копию ~/.ssh помеченную датой. Описание того какие есть ключи и как они работают друг с другом есть внутри скрипта, вместе с примерами уже готовой настройки.

Ключи можно опускать (не указывать) обязательными являются только source и dest Не указанные ключи считаются заданными как false так что вот такая запись валидна

  • {source='~/Изображения/', dest='картинки'}

И означает сделать копию каталога ~/Изображения в каталоге картинки внутри общего каталога бекапа backup_path=... при этом если это второй или последующий бекап и в каталоге ~/Изображения/ была удалена картинка, она не будет удалена в каталоге картинки это сделано специально, дабы максимизировать сохраняемые данные. Если нужна точная копия с удалением того чего уже нет в каталоге источнике то нужно дополнительно явно указать опцию mirror=true это же правило работает если включить флаг zip=true будет всё тоже самое, но уже в виде архива.

На заметку

В каталоге относительно котрого исполняется скрипт будет лог бекапа, на рабочий стол будут приходить уведомление о текущем статусе выполнения, в случае ошибки будет показaн код возврата В лог попадает информация о том какая именно команда потерпела неудачу, пароль присутцвующий в команде заменяется на звёздочки. В зависимости от типа настроенного бекапа(первый бекап будет всегда долгим), а вот последующие при отсуцтвии изменений будут быстрыми исключение это mirror и versions оба создают точную копию с нуля, а не пытаются обновить текущее содержимое бекапа. В случае если любая программа вернёт код возврата отличный от 0 выполнение всего бекапа прерывается, и повторно он не запустится пока не будет удалён lock файл, это сделано специально, чтобы выяснить причину, исправить её и в ручном режиме удалить lock файл название котрого есть в срипте, в логах и уведомлении на рабочий стол.:

Если вы бекапите например ~./vimrc в dest каталог myvimrc то он будет там лежать как есть, с точкой. Так что так же чтобы его увидеть в каталоге бекапа нужно нажимать ctrl+h. Ну, я так. На всякий случай.

Удалять из бекапов лишнее, и вообще контролировать влезет ли всё, это ваша забота =)
Нет опции отключения уведомлений. Предпочитаю явно знать что всё прошло гладко.
Логи бекапа тоже руками удалять.

Дадада, пароль на zip для ssh и gpg ключей хахахаха, но хоть что-то.
Сам внешний накопитель держите шифрованным если туда важное сохраняется.

Сам сриптик. Взял его как есть.

#!/usr/env lua
local backup_rule =
{
    --каталог куда будут размещаться все бекапы
    backup_path = '/media/$USER/STORAGE_SSD/backup';
    --пароль если используется secure=true, лучше использовать файл с паролем
    backup_pass = nil;
    --пароль для важныйх файлов, можно записать в файл дабы не светить
    backup_pass_file = "/home/$USER/Документы/backup_pass";
    ---------------------------------------------------------------------------
    backup_list =
    {
    -- backup critical --
    {secure=true, zip=true, versions=true, source='~/.ssh/',     dest='ssh'    };
    {secure=true, zip=true, versions=true, source='~/.gnupg/',   dest='gpg'    };
    {secure=true, zip=true, mirror=true,   source='~/.config/',  dest='cfg'    };
    {secure=true, zip=true, mirror=true,   source='~/.mozilla/', dest='firefox'};
    {secure=true, zip=true, mirror=true,   source='~/Документы/',dest='doc'    };

    -- diffrerent media --
    {secure=false,zip=true, mirror=true, source='~/Книги/', dest='book'};
    {secure=false,zip=true, mirror=true, source='~/Музыка/',dest='music'};

    -- backup multimedia --
    {secure=false, zip=false, versions=false, source='~/FAMILY_ARCHIVE/', dest='family'};

    -- backup dev stuff  --
    {secure=false, zip=false, versions=true, source='~/.gitconfig',dest='gitconfig'};
    {secure=false, zip=false, versions=true, source='~/.vimrc',    dest='vimrc'};
    {secure=false, zip=false, versions=true, source='~/.bashrc',   dest='bashrc'};
    {secure=false, zip=true,  versions=true, source='~/.vim/',     dest='vim'};

    -- backups source code --
    {secure=false, zip=true, mirror=true, source='/mnt/STORAGE/', dest='code'};

    };
};
-------------------------------------------------------------------------------
-- :secure=true   - шифровать ли сжатый бекап с паролем.
--                  создать архив и запаролить, zip должен быть zip=true
--                  явное указание zip=false или отсуцтвие ключа создаст ошибку
-- ----------------------------------------------------------------------------
-- :secure=false  - тоже самое поведение что и при zip=false
-- ----------------------------------------------------------------------------
-- :zip=true      - создать архив и добавить в него файлы если их нет в архиве
--                  если version=false то обновлять архив, добавляя новые
--                  файлы и обновля существующие, не удаляет отсуцтвующие
-------------------------------------------------------------------------------
-- :zip=false     - создавать бекап в каталоге dest если versions=false
--                  то клонировать source в dest, при повторном бекапе добавлять
--                  новые файлы и обновлять текущие, не удалять отсуцтвующие
--                  если versions=true создавать отдельный бекап в новом
--                  каталоге с датой бекапа, полностью отельный бекап.
-------------------------------------------------------------------------------
-- :versions=true - если zip=false то создать новый каталог с датой бекапа
--                  если zip=true  то создать новый архив с датой бекапа
-------------------------------------------------------------------------------
-- :mirror=true   - если zip=true то создаётся точная сжатая копия источника
--                  если при этом versions=false то текущий архив удаляет из
--                  себя файлы которых больше нет в источнике
--                  если zip=false то вместо архива создаётся точная копия
--                  источника с удалением файлов из каталога бекапа если их
--                  нет в источнике, тоже самое зеркалирование/клонирование
-------------------------------------------------------------------------------
-- :source        - файл или каталог который нужно бекапить, каталоги
--                  обрабатываются рекурсивно бекапя всё что есть
-------------------------------------------------------------------------------
-- :dest          - каталог внутри носителя для бекапа, оно же префикс
--                  добавляющийся к каталогам и/или архивам при versions=true
--                  отражает то бекап чего делается ОБЯЗАН БЫТЬ УНИКАЛЬНЫМ!!!!
-------------------------------------------------------------------------------
--        Если какого либо ключа нет то он считается равным false
-------------------------------------------------------------------------------
-- В случае если zip mkdir или rsync завершаться с кодом отличным от нуля
-- бекап тут же прекращается с уведомлением на рабочий стол и в лог ошибок
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
---- исполняет все команды, в случае ошибки прерывает всю работу
-------------------------------------------------------------------------------
local function execute(rule,command,exit_if_fail)
    local success, meta, code = os.execute(command..' >> backup-info.log');
    if (not success) then
       -- hide pass from output
       -- info log and messages
       if rule.backup_pass then
          command = command:gsub(rule.backup_pass,"********");
       end
       local msg = string.format('BACKUP ERROR %s %s %s',command,meta,code);
       io.stderr:write(msg..'\n');
       io.open('backup-error.log','a+'):write(msg);
       execute({},'notify-send  "'..msg..'" -u critical',false);
       if (exit_if_fail == true) then
          os.exit(127);
       end
       return success;
    end
    return success;
end
-------------------------------------------------------------------------------
--- информирует об ошибке и прерывает всю работу
-------------------------------------------------------------------------------
local function backup_fail(msg)
      io.stderr:write(msg..'\n');
      io.open('backup-error.log','a+'):write('\n'..msg..'\n');
      execute({},'notify-send -u critical "'..msg..'"',false);
      os.exit(127);
end
-------------------------------------------------------------------------------
--- просто информирует
-------------------------------------------------------------------------------
local function backup_info(msg)
      io.stdout:write(msg..'\n');
      local log = io.open('backup-info.log','a+');
      log:write('\n'..msg..'\n');
      log:close();
      execute({},'notify-send -u normal "'..msg..'"',false);
end
-------------------------------------------------------------------------------
--- проверяет используется ли в конфигурации пароль
-------------------------------------------------------------------------------
function check_need_pass(rule)
    for name,val in pairs(rule.backup_list) do
        if val.secure and val.secure == true then
           return true;
        end
    end
    return false;
end
-------------------------------------------------------------------------------
--- делает бекап K.O. :)
-------------------------------------------------------------------------------
local function make_backup(rule)
    if (rule.backup_path) then
       -- replaice $USER in path if we have ite
       rule.backup_path = rule.backup_path:gsub('$USER',os.getenv('USER'));
    else
       backup_fail('BACKUP ERROR backup_path not set, no place to save backup',true);
    end
    -- we use password?
    if (check_need_pass(rule) == true) then
        -- check pass contained in configuration
        if not rule.backup_pass and not rule.backup_pass_file then
           backup_fail('BACKUP ERROR you use secure option but backup_pass or backup_pass_file no set!',true);
        end
        -- if pass_file set read the password
        -- and override/write rule.backup_pass
        if (rule.backup_pass_file) then
           -- replaice $USER in path if we have ite
           rule.backup_pass_file = rule.backup_pass_file:gsub('$USER',os.getenv('USER'));
           local pass_file = io.open(rule.backup_pass_file);
           if (pass_file) then
              if rule.backup_pass then
                 backup_info('BACKUP WARNING rewrite backup_pass from backup_pass_file');
              end
              rule.backup_pass = pass_file:read('*l');
           else
              backup_fail('BACKUP ERROR '..rule.backup_pass_file..' no readable!',true);
           end
           pass_file:close();
        end
        -- maybe pass use only numbers force to string
        rule.backup_pass = tostring(rule.backup_pass);
        -- check small pass, no need but jut be
        if not rule.backup_pass or #rule.backup_pass <= 4 then -- kek cheburek 
           backup_info('BACKUP WARNING you backup_pass small, less or equal 4 symbols');
        end
    end
    -- info about starting
    backup_info("BACKUP START "..os.date());
    --first check, we have storage and access?
    execute(rule,'mkdir -p '..rule.backup_path, true);
    -- lockfile + uuid for exclude collisions
    local lockfile = '.lock-938448fc-1742-43e9-bff8-e2acf6d29710';
    -- check/create lock file
    -- if backup failed you self
    -- delete lock file your hands
    if not io.open(rule.backup_path..'/'..lockfile,'r') then
       io.open(rule.backup_path..'/'..lockfile,'w'):write('lock');
    else
       backup_fail("OTHER BACKUP PROCESS IS WORKING, SKIPPING THIS PROCESS\n"..
                   "IF YOU SURE DELETE LOCK FILE "..rule.backup_path..'/'..lockfile..'\n',true);
       ----------------------------------------------------------------------
       -- uncomment if after backup error no need locked backup for fix error
       ----------------------------------------------------------------------
       -- os.remove(rule.backup_path..'/'..lockfile);
    end
    for id,item in pairs(rule.backup_list) do
        local date = os.date("%Y-%m-%d_%X");
        local path = rule.backup_path;
        local pass = rule.backup_pass;
        local dest = item.dest;
        local source = item.source;

        if (not source) then
           backup_fail('BACKUP ERROR source path not set, what files backup?',true)
        end

        if (not dest) then
           backup_fail('BACKUP ERROR dest path not set, wheare dir name to save?',true)
        end

        execute(rule,'mkdir -p '..path..'/'..dest,true);
        backup_info('BACKUP: '..source);

        ------------------- secure: versionize backup data ---------------------
        ------------------------------------------------------------------------
        if (item.secure and item.zip and item.versions) then
            local target = string.format('%s/%s/%s-%s.zip',path,dest,dest,date);
            execute(rule,'zip -r9P '..pass..' '..target..' '..source,true);
            goto next_item;
        end
        ---------------- secure: update and append backup data -----------------
        ------------------------------------------------------------------------
        if (item.secure and item.zip and not item.versions) then
            local target = string.format('%s/%s/%s.zip',path,dest,dest);
            local opts = item.mirror and ' -rFS9P ' or ' -ru9P ';
            execute(rule,'zip '..opts..' '..pass..' '..target..' '..source,true);
            goto next_item;
        end
        ----------- no secure: zipped update and append backup data ------------
        ------------------------------------------------------------------------
        if (not item.secure and item.zip and not item.versions) then
           local target = string.format('%s/%s/%s.zip',path,dest,dest);
           local opts = item.mirror and ' -rFS9 ' or ' -ru9 ';
           execute(rule,'zip '..opts..' '..target..' '..source,true);
           goto next_item;
        end
        ----- no secure: zipped, versionize update and append backup data ------
        ------------------------------------------------------------------------
        if (not item.secure and item.zip and item.versions ) then
           local target = string.format('%s/%s/%s-%s.zip',path,dest,dest,date);
           execute(rule,'zip -r9 '..target..' '..source,true);
           goto next_item;
        end
        --------- no secure: versionize update and append, no delete -----------
        ------------------------------------------------------------------------
        if (not item.secure and not item.zip and item.versions ) then
           local target = string.format('%s/%s/%s-%s/',path,dest,dest,date);
           execute(rule,'mkdir -p '..target);
           execute(rule,'rsync -arv '..source..' '..target,true);
           goto next_item;
        end
        ----------------- no secure: update and append, no delete --------------
        ------------------------------------------------------------------------
        if (not item.secure and not item.zip and not item.versions) then
           local target = string.format('%s/%s/',path,dest);
           execute(rule,'mkdir -p '..target);
           local opts = item.mirror and ' -arv --delete ' or ' -arv ';
           execute(rule,'rsync '..opts..' '..source..' '..target,true);
           goto next_item;
        end
        ------------------------------------------------------------------------
        if (item.secure and not item.zip) then
            backup_fail('BACKUP ERROR UNSUPPORT SECURE WITCHOUT ZIP ARCHIVE :(');
        end
        ::next_item::
    end
    backup_info("BACKUP END "..os.date());
    os.remove(rule.backup_path..'/'..lockfile);
end

-- check depends
execute({},"zip --version",true);
execute({},"rsync --version",true);
--execute({},"mkdir --version",true);
execute({},"notify-send --version",true);
-- start backup now
make_backup(backup_rule)

Всё. Досвиданья.

Я был о вас лучшего мнения. Весь код внимательно читать лень, но не могу не задать вопрос: Зачем такой колхоз? Причем колхоз ещё и завязанный на lua?
Я про то «какую неведомую цель он преследует?» :)

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 2)

Используйте для бекапа, отдельный диск где нет ничего кроме бекапа! Просто иначе, в бекапе нет никакого смысла.

Какой смысл в бэкапе без отдельного хоста со своим собственным БП и оперативкой, подключенными к источнику по оптике?

sanyo1234
()

https://www.borgbackup.org

Для начала придётся немного почитать документацию. Но читать совсем немного, и возможность делать инкрементальные бекапы всё перевешивает.

i-rinat ★★★★★
()
Ответ на: комментарий от anc

Я был о вас лучшего мнения

Ну и ладно, чё уж поделаешь.

Зачем такой колхоз?

Причем колхоз ещё и завязанный на lua.

Ну, lua это мой домашний язык. У кого питон, у кого баш, у кого перл. У меня вот луа.
Не всё же не сях писать. Мне нужен был второй прикладной язык, где я могу расслабится. Выбор пал на него.

А колхоз, перетыкал я (давно правда уже) всякие бекапилки, именно просто для домашнего использования. Либо монстры, либо огрызки, либо хрен разберёшься. А тут всё что лично мне нужно и всё. Логика этого бекапа кочевала от скрипта к скрипту неизменная в течении 10 лет и то что нужно бекапить тоже столько же лет не менялось. Вот и вся суть. Проще хранить всё в скрипте размером с конфигурационный файл бекап программы. Чем использовать бекап программу. Но это лично мне. За других не говорю.

А так, выложил и всё, чего в столе хранить, кому надо возьмут, а кому не надо не возьмут.
Ни дать не взять. Я периодически всякую фигню выкладываю :)

LINUX-ORG-RU ★★★★★
() автор топика
Ответ на: комментарий от sanyo1234

Смысл бекапа сохранить данные. Если машина источник во время бекапа грохнется тебя рабочая вторая тачка приёмник не спасёт никак. А отдельный диск это просто логично, смысл бекапа из ~/my_cool_file в ~/my_cool_file_backup есть тогда когда ты резервируешь не сами файлы, а их состояние, это да, это имеет смысл. Но когда ты делаешь резервную копию именно что файлов и/или их состояний на внешний диск, ты делаешь резерв на случая кирдыка диска. У тебя помрёт либо основной, либо резервный. Вот я вот про это. Недавно у меня помер резервный например (упал, физически упал).

LINUX-ORG-RU ★★★★★
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

Если машина источник во время бекапа грохнется тебя рабочая вторая тачка приёмник не спасёт никак.

Что происходит со старым бэкапом на отдельном носителе, подключенном к твоему одиночному хосту (или даже с уже свеже сделанной репликой, но ещё не отключенной от твоего одиночного хоста с оригинальными данными) при пробое БП этого хоста?

sanyo1234
()
Ответ на: комментарий от sanyo1234

Какой смысл в бэкапе без отдельного хоста со своим собственным БП и оперативкой, подключенными к источнику по оптике?

Удалили/попортили файлег, можно из локального бэкапа поднять. Не «частость», но и не экзотика. Локальный бэкап не отменяет же бэкап «куда-то там».
ЕМНИП уже писал, у меня один из еженедельных бэкапов переливаться может почти, именно почти, до недели. Стандартное же в пару суток укладываемся. Расстояния...

anc ★★★★★
()
Ответ на: комментарий от anc

Удалили/попортили файлег, можно из локального бэкапа поднять.

ZFS снэпшоты.

Не «частость», но и не экзотика. Локальный бэкап не отменяет же бэкап «куда-то там». ЕМНИП уже писал, у меня один из еженедельных бэкапов переливаться может почти, именно почти, до недели. Стандартное же в пару суток укладываемся. Расстояния…

ZFS реплика делается за минуты, иногда часы.

sanyo1234
()
Ответ на: комментарий от LINUX-ORG-RU

Спасибо за развернутые пояснения! От теперь все стало понятно :)

anc ★★★★★
()
Ответ на: комментарий от i-rinat

У меня есть инкрементальные бекапы, хоть в архив хоть просто в каталог. rsync вообще для этого создан, а zip это умеет (нуу, так себе умеет). Мне просто нужно положить файлы из места А в место Б. Архивировать или нет, паролить или нет, обновлять только новое или всё принудительно, удалять из бекапа то что нет в источнике или сохранять, держать одну копию или версионировать по датам. Вот это ровно всё что есть и всё что мне надо. Я не вижу смысла менять маленькую lua портянку с парой зависимостей на больную python программу,из которой я не буду использовать 99% всего что в ней есть.

Но погляжу, спасибо. У меня просто скромные запросы. Вот если будет что-то сложнее то уже да, надо смотреть в сторону готовых решений, а не накостылять. Всему должна быть мера и разумные границы. Ну, фиг знает, ИМХО :) Ну и мне лень/сложно новое изучать, да есть такое. Как там, дед пердед, ретроград, велосидедиск, все в машину и всё такое.

LINUX-ORG-RU ★★★★★
() автор топика
Ответ на: комментарий от sanyo1234

ZFS снэпшоты.

Снэпшоты конечно хорошо, но муторно, да и ресурсов «чуть» больше жрут. Так-то я не против, не подумайте, это один из вариантов. Но это не бэкап! Мне кажется вы эту разницу не можете понять.

Не «частость», но и не экзотика. Локальный бэкап не отменяет же бэкап «куда-то там». ЕМНИП уже писал, у меня один из еженедельных бэкапов переливаться может почти, именно почти, до недели. Стандартное же в пару суток укладываемся. Расстояния…

ZFS реплика делается за минуты, иногда часы.

Вы правда прочитали тот абзац который процитировали?

anc ★★★★★
()
Ответ на: комментарий от sanyo1234

Выгорает USB контроллер посылая повышенное напряжение на USB устройства, все они сгорают, но внешний диск остаётся цел так как в наличии стабилитроны и варисторы на уровня контроллера переходника USB<->SATA хоть 220 напрямую по USB пускай, ничего не пройдёт до диска. А EXT4 на внешнем носителе позволит файлы если не восстановить (во время записи которых произошла авария) то как минимум не потерять те что уже имеются.

Но в идеале конечно диску можно/нужно своё питание подать. Это решается одним переходником по сути =)

LINUX-ORG-RU ★★★★★
() автор топика
Ответ на: комментарий от anc

Вот сегодня ночью (пока вы все дрыхли!) мы ещё пингвину Ковальски помогали отправить рыбов белым медведям. Ты тоже можешь помочь Ковальски собрать статистику. Помоги Ковальски, спаси медвеняв от голода!

Аналогичная фигня и тут в общем :D

LINUX-ORG-RU ★★★★★
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

Ну наискосок вроде ничего плохого не увидел. Но это наискосок! Так что простите, я со своим «hell world-ом» поживу :)

anc ★★★★★
()
Ответ на: комментарий от rupert

Лишняя абстракция, я могу изменить ~/.config/user-dirs.dirs. Более того оно может изменится без моего ведома. Так что я прописываю пути явно, если что-то не то то бекап просто отвалится , уведомив про ошибку и записав лог файл. А не будет тихо писать вообще иное.

Я раньше для удобства просто держал в хомяке каталог .blabla_baclup в который кидал симлинки на то что нужно бекапить, а бекап программам или своим сриптам просто скармливал 1 каталог который содержал симлинки. Но, это тоже ещё-одна-бесполезная-абстракция. Ну типа =)

LINUX-ORG-RU ★★★★★
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

Так что я прописываю пути явно, если что-то не то то бекап просто отвалится

Много чая!

anc ★★★★★
()
Ответ на: комментарий от anc

Ну и нормально. Луашникам может зайдёт, а остальным оно и не надо. Стрёмно использовать портянки на непривычных языках. У меня вот нет ничего от других например на перле (не есть конечно в сситеме, но я имею в виду чисто домашние скрипты под всякое), ой удагайте почему :D Потому что там порой такая магия происходит что не знаешь как дышать вообще.

LINUX-ORG-RU ★★★★★
() автор топика
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от anc

Снэпшоты конечно хорошо, но муторно,

А ваши детские скриптики с сомнительной надежностью, работающие в сотни раз дольше ZFS не муторно?

да и ресурсов «чуть» больше жрут.

Времени админа? LOL

У меня ZFS прекрасно работает даже на хостах с 2GB RAM и VPS с 1GB RAM.

Так-то я не против, не подумайте, это один из вариантов. Но это не бэкап! Мне кажется вы эту разницу не можете понять.

Мне кажется, вы забыли обсуждаемый use-case:

Удалили/попортили файлег, можно из локального бэкапа поднять.

Снэпшот для такого не подходит? Даже без репликации?

sanyo1234
()
Последнее исправление: sanyo1234 (всего исправлений: 2)
Ответ на: комментарий от LINUX-ORG-RU

Выгорает USB контроллер посылая повышенное напряжение на USB устройства, все они сгорают, но внешний диск остаётся цел так как в наличии стабилитроны и варисторы на уровня контроллера переходника USB<->SATA хоть 220 напрямую по USB пускай, ничего не пройдёт до диска.

Можно пример схемы с таким варистором?

А EXT4 на внешнем носителе позволит файлы если не восстановить (во время записи которых произошла авария) то как минимум не потерять те что уже имеются.

В смысле это лучше ZFS реплик, где чётко видно, что было записно до, а что после аварии?

Но в идеале конечно диску можно/нужно своё питание подать. Это решается одним переходником по сути =)

А питание USB надо перерезать в таком случае?

sanyo1234
()
Ответ на: комментарий от amd_amd

бекапы нинужны

И запасы ненужны. (сарказм)

Нужно жЫдь в кредит, с минимальными запасами на 1-2 дня и ЗП, которая не позволяет копить запасы.

sanyo1234
()
Последнее исправление: sanyo1234 (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Стрёмно использовать портянки на непривычных языках.

Та они вобчем-то, если не брать всякие павершели и другую подобную фигню, не сильно различаются. Вашу не очень большую портянку распарсить возможно, но лень :) Имхо много раз здесь приводил слова препода по программированию которые я когда-то не понял: «Сначала описываем задачу, потом выбираем инструмент» (не буква в букву). Но основное, что нам молодым долбодятлам было не понятно это «инструмент». Как так? Мы умеем на васике, мы умеем на паскакале, сейчас мы учим ЦПП, естесноо это должен быть ЦПП :)

anc ★★★★★
()

Не оч красиво, что бекап_рулл и локфайл захардкодены.
Рсинк можно на рклон заменить.
Рсинк в последние годы немного не алё имхо (может мне просто кажется).
Хотя если удобно, то лан.
Не всегда красивое это хорошее.

Exmor_RS ★★★
()
Последнее исправление: Exmor_RS (всего исправлений: 2)
Ответ на: комментарий от sanyo1234

А ваши детские скриптики с сомнительной надежностью, работающие в сотни раз дольше ZFS не муторно?

Они надежные.

У меня ZFS прекрасно работает даже на хостах с 2GB RAM и VPS с 1GB RAM.

Я за вас порадовался.

Снэпшот для такого не подходит?

Подходит. Но не всегда.

Удалили/попортили файлег, можно из локального бэкапа поднять.

Можно. Но не всегда.

anc ★★★★★
()
Ответ на: комментарий от sanyo1234

запасы

не гони - бекапы и запасы это разные вещи, запасы для запасливых, бекапы для рукожопых - не в обиду сказано.

в кредит

нивкоем случае никогда не берите кредитов или ипотек - в идеале это дерьмо должно умереть

и ЗП, которая не позволяет копить запасы

у начальника полляма, у работяг по паре мротов… что предлапгаешь его живьем всесте с семьей закопать?

amd_amd ★★★★★
()
Последнее исправление: amd_amd (всего исправлений: 2)
Ответ на: комментарий от Exmor_RS

Рсинк в последние годы немного не алё имхо (может мне просто кажется).

Можно примеров накидать?

anc ★★★★★
()
Ответ на: комментарий от amd_amd

не гони - бекапы и запасы это разные вещи,

Повышение выживаемости и независимости отдельно взятого объекта?

запасы для запасливых, бекапы для рукожопых - не в обиду сказано.

Без запасов не умеют жЫдь только рукожопы?

sanyo1234
()
Ответ на: комментарий от anc

Умер хард. Совсем умер.

Для обсуждаемого use-case (удалили файлег), зачем метаться по разным use-cases и сравнивать несравнимое?

В случае выхода из строя всего массива ZFS предусматривает реплики на массивах других хостов.

sanyo1234
()
Последнее исправление: sanyo1234 (всего исправлений: 1)
Ответ на: комментарий от sanyo1234

В случае выхода из строя всего массива, ZFS предусматривает реплики на массивах других хостов.

Ехал грека через греку. Фактически к бэкапам приезжаем.

anc ★★★★★
()
Ответ на: комментарий от sanyo1234

Повышение выживаемости

какой еще выживаемости если нарукожопили так что все померло и из бекапа пришлось восстановить

Без запасов

для тупых повторяю второй раз и последний - запасы и бекапы это разные вещи.

amd_amd ★★★★★
()
Ответ на: комментарий от anc

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

Exmor_RS ★★★
()
Ответ на: комментарий от anc

Фактически к бэкапам приезжаем.

Вы зачем всё в одну кучу смешали?

Я вам про use-case: Удалили/попортили файлег, можно из локального бэкапа поднять., вы опять куда-то не туда поехали.

sanyo1234
()
Ответ на: комментарий от anc

Он не понимает разницу между бэкапами и резервированием.

На основании чего такой вывод? Вы вообще русские слова не понимаете, и клевещите на других.

Вам говорят, что снэпшоты для восстановления файликов, реплики на других хостах вместо бэкапов.

А вы продолжаете кидаться в собеседников своими тупыми какахами.

sanyo1234
()
Ответ на: комментарий от sanyo1234

Можно пример схемы с таким варистором?

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

Предохранитель может быть плавким. А может стоять вообще не предохранитель, а любой иной элемент, цель варистора отвести нагрузку от прибора, чтобы сгорел не прибор, а то к чему он подключён, то что его питает.

В смысле это лучше ZFS реплик, где чётко видно, что было записно до, а что после аварии?

Я про ZFS ничего не говорил, я её не использую и не разбираюсь в этой ФС. Мне и ответить то нечего. Лучше, хуже. Понятия не имею.

А питание USB надо перерезать в таком случае?

Ну есть USB провода, где внутри просто нет проводов питания, устройство питается своим источником, батарейкой, отдельным блоком питания. Общий минус будет, через оплётку (если она есть хаха) конечно. На самом деле смысл внешнего питания накопителя, например от личного ИБП может даже полезен, так как внутри накопителей свой процессор и он много чего делает в фоне, HDD SMART гоняет втихую и служебные блоки перемагничивает. SSD данные утрамбовывает, даже если крякнулся и лопнул ПК с которого идёт бекап и всё задымилось, может и норм сохранить питание накопителя дабы он пусть и получил обрыв получения данных, но смог закончить корректно свои внутренние работы. Чёт тип того

LINUX-ORG-RU ★★★★★
() автор топика
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от Exmor_RS

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

А, ви в этом смысле. Пальцем в небо, не исключаю, что есть нечто подобное. Так-то ничего не мешает кроме долбанного «вынапи», я в смысле, что это будет уже «более другой» rsync аля winrsync. Например у шинды оочень давно есть есть функции алярма на изменения в фолдере, т.е. файлег поменялся, условный «rsync сервер» среагировал. У меня именно такой вариант был, здесь уже описывал не раз, повторяться не буду.

anc ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Ну вот одна из простейших схем, все любые иные построены на такой же логике. Если напряжение превышает определённых порог, то варистор замыкает цепь па себя, от этого резко возрастает ток на предохранителе, по основной цепи к потребителю ток и напряжение резко падают.

Это защита только от перенапряжения на входе БП. А если БП поедет своей кукухой (из-за неудачной схемы или дефектной элементной базы, а в новейших моделях наверно даже нельзя исключать закладки, особенно в ИБП) и сработает нештатно на обычном входном напряжении? Инцидентов - пробоев БП с сохранением целостности защитных элементов при нормальном питании 220В никогда не было?

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

Предохранитель может быть плавким. А может стоять вообще не предохранитель, а любой иной элемент, цель варистора отвести нагрузку от прибора, чтобы сгорел не прибор, а то к чему он подключён, то что его питает.

Что, если в таком случае варистор сгорит раньше предохранителя? Причём после сгорания он перейдёт в состояние проводника? А предохранитель (который обычно один) к примеру вообще окажется более задумчивым, чем кабель питания?

sanyo1234
()
Ответ на: комментарий от sanyo1234

Ну, что сказать. Конечно может случиться так что всё унесёт нафиг, да банальный брак или неправильные характеристики (варистор слабее предохранителя), вариантов много. Но ну нет у меня второго ПК, чтобы на него по сети кидать. Был, в виде смонтированного webDav (яндекс) каталога, куда этим же скриптом делалась копия копии, но потом там чёт не то пошло, в смысле с яндесом. Забил. Была бы у меня NAS коробочка какая, яб её под столом держал и кидалось бы в неё по wifi тихонько всё. Ну вот нету, чё хошь вот то и делай :D Что имеем с тем и живём.

LINUX-ORG-RU ★★★★★
() автор топика
Последнее исправление: LINUX-ORG-RU (всего исправлений: 3)
Ответ на: комментарий от LINUX-ORG-RU

Собрать второй ПК с Авито из комплектующих 10 летней давности стоит сущие копейки, 2-3 тыр.

Сколько стоят твои данные? Сомневаюсь, что ты можешь адекватно их оценить до потери.

Вот представь чисто теоретически, что ты потерял основную копию и все бэкапы (не дай Бог конечно). Сколько бы ты заплатил Богу или дьяволу и кому угодно другому, за то, чтобы вернуть их обратно?

2-3 млн. руб? Больше? Взял бы кредит?

А если бы ты был миллиардером, то стал бы мелочиться, если бы тебе выставили счёт, например на несколько процентов от твоего состояния (какие-нибудь жалкие 5-10 млрд. рублей)?

sanyo1234
()
Последнее исправление: sanyo1234 (всего исправлений: 1)
Ответ на: комментарий от sanyo1234

Ну у меня есть RPI (самая первая) только починить надо немножко, я там кондёр сбил. Можно сделать маааааленький NAS на 1 накопитель и пулять ему по wifi файлики. Даже и покупать почти ничего не надо, флешку, да блок питания на 5 вольт. Wifi свисток есть.

Но ты тут давай меня не пугай :D Чисто теоретически у меня дом сгореть может и второй ПК тут уже не поможет, разве что облако. Но думаю, подобное этому будет заботить меня в последнюю очередь. Может я сам сгорю 😱, а себя не забекапишь. Да и не особо хочется, я в SOMA играл и Луна2112 смотрел, нифига хорошего и вообще страшно.

LINUX-ORG-RU ★★★★★
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

Свечку не держал, поэтому на 100% не уверен. Но вроде проскакивал вариант дешман рэйд коробочки. Два харда и на выходе усб. То есть это не NAS и тем более не SAN, но такой дешман вариантик первого рейда для совсем локальных эпизодических бэкапов.

anc ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Ну есть USB провода, где внутри просто нет проводов питания, устройство питается своим источником, батарейкой, отдельным блоком питания.

Может ли в таком случае БЕЗ ОПТИКИ при неудачном стечении обстоятельств получиться разность потенциалов выше уровня выживаемости контроллеров+носителей и прийти по сигнальному и/или общему проводнику?

Допустим, вилки БП включены на разных системниках по-разному, а в сети ещё и перекос фаз и плавающее напряжение в т.ч. с потенциалом относительно инженерных конструкций типа батарей, арматуры в стенах, куда вкручиваются несущие анкера металлических шкафов, и т.п. Соседи накуролесили или электрики и т.д. и т.п.

В идеале IMHO бэкап сервер должен питаться через низковольтный преобразователь типа PicoPSU от аккумуляторной батареи с надёжной BMS, а к сети вообще НИКОГДА НЕ ДОЛЖЕН подключаться.

sanyo1234
()
Последнее исправление: sanyo1234 (всего исправлений: 2)
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)