Резервне копіювання і відновлення¶
У цьому розділі ви дізнаєтесь, як створювати резервні копії та відновлювати дані за допомогою Linux.
Цілі: у цьому розділі майбутні адміністратори Linux дізнаються, як:
використовувати команди tar
і cpio
, для створення резервної копії;
перевіряти резервні копії та відновлювати дані;
архівувати або розпакувати резервні копії.
резервне копіювання, відновлення, стиснення
Знання:
Складність:
Час для читання: 40 хвилин
Примітка
У цій главі командні структури використовують «пристрій» для визначення як цільового розташування для резервного копіювання, так і вихідного розташування під час відновлення. Пристроєм може бути як зовнішній носій, так і локальний файл. Ви повинні відчути це, коли розгортається розділ, але ви завжди можете повернутися до цієї примітки для роз’яснення, якщо вам потрібно.
Резервне копіювання задовольнить необхідність збереження та відновлення даних надійним і ефективним способом.
Резервне копіювання дозволяє захистити себе від наступного:
- Знищення: добровільне чи мимовільне. Людські або технічні. Вірус, ...
- Видалення: добровільне чи мимовільне. Людські або технічні. Вірус, ...
- Цілісність: дані стають непридатними для використання.
Жодна система не є безпомилковою, жодна людина не є безпомилковою, тому, щоб уникнути втрати даних, необхідно створити їх резервну копію, щоб мати можливість їх відновити.
Носій резервного копіювання слід зберігати в іншій кімнаті (або будівлі), ніж сервер, щоб катастрофа не знищила сервер і резервні копії.
Крім того, адміністратор повинен регулярно перевіряти, чи не пошкоджені носії резервних копій.
Загальні положення¶
Існує два принципи: резервне копіювання та архівування.
- Архів після операції знищує джерело інформації.
- Резервна копія зберігає джерело інформації після операції.
Ці операції складаються зі збереження інформації у файлі, на периферійному чи підтримуваному носії (стрічках, дисках тощо).
Процес¶
Резервне копіювання вимагає від системного адміністратора великої дисциплінованості та ретельності. Необхідно поставити наступні питання:
- Яке середовище є відповідним?
- Для чого слід створити резервну копію?
- Скільки примірників?
- Скільки часу триватиме резервне копіювання?
- Метод?
- Як часто?
- Автоматичне чи ручне?
- Де його зберігати?
- Як довго він буде зберігатися?
Методи резервного копіювання¶
- Повний: створено резервну копію однієї або кількох файлових систем (ядро, дані, утиліти, ...).
- Частковий: створюється резервна копія одного або кількох файлів (конфігурацій, каталогів тощо).
- Диференційний: створюються резервні копії лише файлів, змінених після останнього повного резервного копіювання.
- Інкрементний: створюється резервна копія лише файлів, змінених після останнього резервного копіювання.
Періодичність¶
- Попередньо: у певний час (до оновлення системи, ...).
- Періодичність: щоденно, щотижня, щомісяця, ...
Порада
Перед зміною системи може бути корисно зробити резервну копію. Однак немає сенсу щодня створювати резервні копії даних, які змінюються лише щомісяця.
Методи відновлення¶
Залежно від доступних утиліт, можна буде виконати кілька типів відновлення.
- Повне відновлення: дерева, ...
- Вибіркове відновлення: частина дерева, файли, ...
Можна відновити всю резервну копію, але також можна відновити лише її частину. Однак під час відновлення каталогу файли, створені після резервного копіювання, не видаляються.
Порада
Щоб відновити каталог, яким він був на момент створення резервної копії, необхідно повністю видалити його вміст перед початком відновлення.
Інструменти¶
Існує багато утиліт для створення резервних копій.
- інструменти редактора;
- графічні інструменти;
- інструменти командного рядка:
tar
,cpio
,pax
,dd
,dump
, ...
Команди, які ми тут використаємо, це tar
і cpio
.
-
tar
: -
простий у використанні;
-
дозволяє додавати файли до існуючої резервної копії.
-
cpio
: -
зберігає власників;
- зберігає групи, дати та права;
- пропускає пошкоджені файли;
- вся файлова система.
Примітка
Ці команди зберігають у власному стандартизованому форматі.
Правила іменування¶
Використання угоди про найменування дає змогу швидко визначити вміст файлу резервної копії та таким чином уникнути небезпечне відновлення.
- назва довідника;
- використана утиліта;
- використовувані опції;
- дата.
Порада
Ім’я резервної копії має бути чітким.
Примітка
Поняття розширення в Linux не існує. Іншими словами, ми використовуємо розширення тут для людини-оператора. Якщо системний адміністратор бачить, наприклад, розширення файлу .tar.gz
або .tgz
, то він знає, як поводитися з файлом.
Вміст резервної копії¶
Резервна копія зазвичай містить такі елементи:
- файл;
- ім'я;
- власник;
- розмір;
- дозволи;
- дата доступу.
Примітка
Номер inode
відсутній.
Режими зберігання¶
Існує два різних режими зберігання:
- файл на диску;
- пристрій.
Tape ArchiveR - tar
¶
Команда tar
дозволяє зберігати на кількох послідовних носіях (багатотомні параметри).
Є можливість розпакувати всю або частину резервної копії.
tar
неявно виконує резервне копіювання у відносному режимі, навіть якщо шлях до інформації для резервного копіювання вказано в абсолютному режимі. Проте резервне копіювання та відновлення в абсолютному режимі можливі.
Інструкції з відновлення¶
Правильними запитаннями є:
- що: часткове чи повне;
- де: місце відновлення даних;
- як: абсолютна чи відносна.
Увага
Перед відновленням важливо подумати та визначити найбільш відповідний метод, щоб уникнути помилок.
Відновлення зазвичай виконуються після того, як виникла проблема, яку необхідно швидко вирішити. Неякісна реставрація може в деяких випадках погіршити ситуацію.
Резервне копіювання за допомогою tar
¶
Стандартною утилітою для створення резервних копій у системах UNIX є команда tar
. Ці резервні копії можна стискати за допомогою bzip2
, xz
, lzip
, lzma
, lzop
, gzip
, compress
або zstd
.
tar
дозволяє видобувати один файл або каталог із резервної копії, переглядати його вміст або перевіряти його цілісність.
Оцінка розміру резервної копії¶
Наступна команда оцінює розмір можливого файлу tar у кілобайтах:
$ tar cf - /directory/to/backup/ | wc -c
20480
$ tar czf - /directory/to/backup/ | wc -c
508
$ tar cjf - /directory/to/backup/ | wc -c
428
Увага
Обережно, наявність «-» у командному рядку заважає zsh
. Переключіться на bash
!
Правила іменування резервної копії tar
¶
Ось приклад іменування резервної копії tar
, знаючи, що до назви потрібно додати дату.
опції | Файли | Суфікс | Функціональність |
---|---|---|---|
cvf |
home |
home.tar |
/home у відносному режимі, нестиснена форма |
cvfP |
/etc |
etc.A.tar |
/etc в абсолютному режимі, без стиснення |
cvfz |
usr |
usr.tar.gz |
/usr у відносному режимі, стиснення gzip |
cvfj |
usr |
usr.tar.bz2 |
/usr у відносному режимі, стиснення bzip2 |
cvfPz |
/home |
home.A.tar.gz |
home в абсолютному режимі, стиснення gzip |
cvfPj |
/home |
home.A.tar.bz2 |
home в абсолютному режимі, стиснення bzip2 |
… |
Створення резервної копії¶
Створення резервної копії у відносному режимі¶
Створення нестиснутої резервної копії у відносному режимі виконується за допомогою параметра cvf
:
tar c[vf] [device] [file(s)]
Приклад:
[root]# tar cvf /backups/home.133.tar /home/
Параметр | Опис |
---|---|
c |
Створює резервну копію. |
v |
Відображає назву оброблених файлів. |
f |
Дозволяє вказати назву резервної копії (носій). |
Порада
Дефіс (-
) перед клавішами tar
не потрібен!
Створення резервної копії в абсолютному режимі¶
Створення нестиснутої резервної копії в абсолютному режимі виконується за допомогою опції cvfP
:
tar c[vf]P [device] [file(s)]
Приклад:
[root]# tar cvfP /backups/home.133.P.tar /home/
Параметр | Опис |
---|---|
P |
Створення резервної копії в абсолютному режимі. |
Увага
За допомогою клавіші P
шлях до файлів для резервного копіювання має бути введений як абсолютний. Якщо дві умови (ключ P
і шлях абсолютний) не вказано, резервне копіювання виконується у відносному режимі.
Створення стисненої резервної копії за допомогою gzip
¶
Створення стисненої резервної копії за допомогою gzip
виконується за допомогою опції cvfz
:
tar cvzf backup.tar.gz dirname/
Параметр | Опис |
---|---|
z |
Стискання резервної копії в gzip. |
Примітка
Розширення .tgz
є еквівалентним розширенням .tar.gz
.
Примітка
Збереження опцій cvf
(tvf
або xvf
) незмінними для всіх операцій резервного копіювання та просте додавання опції стиснення в кінці робить команду легшою для розуміння (наприклад, cvfz
або cvfj
тощо).
Створення стисненої резервної копії за допомогою bzip
¶
Створення стисненої резервної копії за допомогою bzip
виконується за допомогою опції cvfj
:
tar cvfj backup.tar.bz2 dirname/
Параметр | Опис |
---|---|
j |
Стискає резервну копію в bzip2. |
Примітка
Розширення .tbz
і .tb2
еквівалентні розширенням .tar.bz2
.
Стиснення compress
, gzip
, bzip2
, lzip
і xz
¶
Стиснення та, як наслідок, декомпресія впливатимуть на споживання ресурсів (час і використання ЦП).
Ось рейтинг стиснення набору текстових файлів від найменшого до найефективнішого:
- compress (
.tar.Z
) - gzip (
.tar.gz
) - bzip2 (
.tar.bz2
) - lzip (
.tar.lz
) - xz (
.tar.xz
)
Додавання файлу або каталогу до наявної резервної копії¶
До існуючої резервної копії можна додати один або кілька елементів.
tar {r|A}[key(s)] [device] [file(s)]
Щоб додати /etc/passwd
до резервної копії /backups/home.133.tar
:
[root]# tar rvf /backups/home.133.tar /etc/passwd
Додавання каталогу аналогічно. Тут додайте dirtoadd
до backup_name.tar
:
tar rvf backup_name.tar dirtoadd
Параметр | Опис |
---|---|
r |
Додає один або кілька файлів наприкінці резервної копії носія з прямим доступом (жорсткий диск). |
A |
Додає один або кілька файлів наприкінці резервного копіювання на носій із послідовним доступом (стрічка). |
Примітка
Неможливо додати файли або папки до стиснутої резервної копії.
$ tar rvfz backup.tgz filetoadd
tar: Cannot update compressed archives
Try `tar --help' or `tar --usage' for more information.
Примітка
Якщо резервне копіювання було виконано у відносному режимі, додайте файли у відносному режимі. Якщо резервне копіювання було зроблено в абсолютному режимі, додайте файли в абсолютному режимі.
Змішування режимів може викликати проблеми при відновленні.
Перелік вмісту резервної копії¶
Перегляд вмісту резервної копії без її вилучення можливий.
tar t[key(s)] [device]
Параметр | Опис |
---|---|
t |
Відображає вміст резервної копії (стисненої чи ні). |
Приклади:
tar tvf backup.tar
tar tvfz backup.tar.gz
tar tvfj backup.tar.bz2
Коли кількість файлів у резервній копії стає великою, можна передати результат команди tar
на pager (більше
, менше
, більшість
тощо):
tar tvf backup.tar | less
Підказка
Щоб отримати список або отримати вміст резервної копії, немає необхідності згадувати алгоритм стиснення, який використовувався під час створення резервної копії. Тобто tar tvf
еквівалентний tar tvfj
для читання вмісту, а tar xvf
еквівалентний tar xvfj
для вилучення.
Підказка
Завжди перевіряйте вміст резервної копії.
Перевірка цілісності резервної копії¶
Цілісність резервної копії можна перевірити за допомогою опції W
під час її створення:
tar cvfW file_name.tar dir/
Цілісність резервної копії можна перевірити за допомогою опції d
після її створення:
tar vfd file_name.tar dir/
Порада
Додавши другий v
до попереднього ключа, ви отримаєте список заархівованих файлів, а також відмінності між заархівованими файлами та файлами, присутніми у файловій системі.
$ tar vvfd /tmp/quodlibet.tar .quodlibet/
drwxr-x--- rockstar/rockstar 0 2021-05-21 00:11 .quodlibet/
-rw-r--r-- rockstar/rockstar 0 2021-05-19 00:59 .quodlibet/queue
[…]
-rw------- rockstar/rockstar 3323 2021-05-21 00:11 .quodlibet/config
.quodlibet/config: Mod time differs
.quodlibet/config: Size differs
[…]
Опція W
також використовується для порівняння вмісту архіву з файловою системою:
$ tar tvfW file_name.tar
Verify 1/file1
1/file1: Mod time differs
1/file1: Size differs
Verify 1/file2
Verify 1/file3
Перевірку за допомогою опції W
неможливо виконати зі стисненим архівом. Потрібно використовувати опцію D:
tar dfz file_name.tgz
tar dfj file_name.tar.bz2
Розпакування (untar) резервної копії¶
Розпакування (untar) резервної копії *.tar
виконується за допомогою опції xvf
:
Розпакування файлу etc/exports
із резервної копії /savings/etc.133.tar
у каталог etc
активного каталогу:
tar xvf /backups/etc.133.tar etc/exports
Розпакування всіх файлів зі стисненої резервної копії /backups/home.133.tar.bz2
в активний каталог:
[root]# tar xvfj /backups/home.133.tar.bz2
Розпакування усіх файлів з резервної копії /backups/etc.133.P.tar
до оригінального каталогу:
tar xvfP /backups/etc.133.P.tar
Увага
Перейдіть в потрібне місце.
Перевірте вміст резервної копії.
Параметр | Опис |
---|---|
x |
Витягує файли з резервної копії, стиснуті чи ні. |
Видобування резервної копії tar-gzip (*.tar.gz
) виконується за допомогою опції xvfz
:
tar xvfz backup.tar.gz
Видобування резервної копії tar-bzip (*.tar.bz2
) виконується за допомогою опції xvfj
:
tar xvfj backup.tar.bz2
Порада
Щоб видобути або отримати список вмісту резервної копії, немає необхідності згадувати алгоритм стиснення, який використовується для створення резервної копії. Тобто tar xvf
еквівалентний tar xvfj
, щоб витягнути вміст, а tar tvf
еквівалентний tar tvfj
, щоб отримати список.
Увага
Щоб відновити файли у вихідному каталозі (опція P
tar xvf
), ви повинні створити резервну копію з абсолютним шляхом. Тобто за допомогою опцій P
tar cvf
.
Витягнути лише файл із резервної копії tar¶
Щоб отримати певний файл із резервної копії tar, укажіть назву цього файлу в кінці команди tar xvf
.
tar xvf backup.tar /path/to/file
Попередня команда витягує лише файл /path/to/file
із резервної копії backup.tar
. Цей файл буде відновлено до каталогу /path/to/
, створеного або вже наявного в активному каталозі.
tar xvfz backup.tar.gz /path/to/file
tar xvfj backup.tar.bz2 /path/to/file
Витягнути папку з резервної копії tar¶
Щоб отримати лише один каталог (включно з його підкаталогами та файлами) із резервної копії, вкажіть назву каталогу в кінці команди tar xvf
.
tar xvf backup.tar /path/to/dir/
Щоб отримати кілька каталогів, вкажіть кожне з імен одне за одним:
tar xvf backup.tar /path/to/dir1/ /path/to/dir2/
tar xvfz backup.tar.gz /path/to/dir1/ /path/to/dir2/
tar xvfj backup.tar.bz2 /path/to/dir1/ /path/to/dir2/
Витягнути групу файлів із резервної копії tar за допомогою регулярних виразів (regex)¶
Укажіть regex, щоб видобути файли, які відповідають вказаному шаблону вибору.
Наприклад, щоб видобути всі файли з розширенням .conf
:
tar xvf backup.tar --wildcards '*.conf'
опції:
- --wildcards *.conf відповідає файлам із розширенням
.conf
.
CoPy Input Output - cpio
¶
Команда cpio
дозволяє зберігати на кількох послідовних носіях, не вказуючи жодних параметрів.
Є можливість розпакувати всю або частину резервної копії.
Немає можливості, на відміну від команди tar
, для резервного копіювання та стиснення одночасно. Отже, це робиться в два етапи: резервне копіювання та стиснення.
Щоб виконати резервне копіювання за допомогою cpio
, вам потрібно вказати список файлів для резервного копіювання.
Цей список надається за допомогою команд find
, ls
або cat
.
find
: переглянути дерево, рекурсивне чи ні;ls
: перелічує каталог, рекурсивний чи ні;cat
: читає файл, що містить дерева або файли, які потрібно зберегти.
Примітка
ls
не можна використовувати з -l
(подробиці) або -R
(рекурсивний).
Для цього потрібен простий список імен.
Створення резервної копії за допомогою команди cpio
¶
Синтаксис команди cpio
:
[files command |] cpio {-o| --create} [-options] [<file-list] [>device]
Приклад:
З перенаправленням виводу cpio
:
find /etc | cpio -ov > /backups/etc.cpio
Використання назви резервного носія:
find /etc | cpio -ovF /backups/etc.cpio
Результат виконання команди find
надсилається як вхідні дані для команди cpio
через pipe (символ |
, AltGr+6).
Тут команда find /etc
повертає команді cpio
список файлів, що відповідають вмісту каталогу /etc
(рекурсивно), який виконує резервне копіювання.
Не забудьте про знак >
під час збереження або F save_name_cpio
.
Опції | Опис |
---|---|
-o |
Створює резервну копію (output). |
-v |
Відображає назву оброблених файлів. |
-F |
Позначає резервну копію, яку потрібно змінити (середня). |
Резервне копіювання на носій:
find /etc | cpio -ov > /dev/rmt0
Призначенням може бути наступне:
- стрічковий накопичувач:
/dev/rmt0
; - розділ:
/dev/sda5
,/dev/hda5
тощо.
Тип резервного копіювання¶
Резервне копіювання з відносним шляхом¶
cd /
find etc | cpio -o > /backups/etc.cpio
Резервне копіювання з абсолютним шляхом¶
find /etc | cpio -o > /backups/etc.A.cpio
Увага
Якщо шлях, указаний у команді find
, є абсолютним, тоді резервне копіювання буде виконано в абсолютному.
Якщо шлях, указаний у команді find
, є відносним, тоді резервне копіювання буде виконано у відносному.
Додати до резервної копії¶
[files command |] cpio {-o| --create} -A [-options] [<fic-list] {F|>device}
Приклад:
find /etc/shadow | cpio -o -AF SystemFiles.A.cpio
Додавання файлів можливе лише на носії прямого доступу.
Опція | Опис |
---|---|
-A |
Додає один або кілька файлів до резервної копії на диску. |
-F |
Визначає резервну копію, яку потрібно змінити. |
Стиснення резервної копії¶
- Збережіть потім стисніть
$ find /etc | cpio –o > etc.A.cpio
$ gzip /backups/etc.A.cpio
$ ls /backups/etc.A.cpio*
/backups/etc.A.cpio.gz
- Зберегти та стиснути
find /etc | cpio –o | gzip > /backups/etc.A.cpio.gz
На відміну від команди tar
, немає можливості зберігати та стискати одночасно. Отже, це робиться в два етапи: збереження та стиснення.
Синтаксис першого методу легше зрозуміти і запам'ятати, оскільки він складається з двох кроків.
Для першого методу файл резервної копії автоматично перейменовується утилітою gzip
, яка додає .gz
у кінець імені файлу. Так само утиліта bzip2
автоматично додає .bz2
.
Прочитати вміст резервної копії¶
Синтаксис команди cpio
для читання вмісту резервної копії cpio:
cpio -t [-options] [<fic-list]
Приклад:
cpio -tv </backups/etc.152.cpio | less
Опції | Опис |
---|---|
-t |
Читає резервну копію. |
-v |
Відображає атрибути файлу. |
Після створення резервної копії необхідно прочитати її вміст, щоб переконатися, що немає помилок.
Таким же чином, перед виконанням відновлення, ви повинні прочитати вміст резервної копії, яка буде використана.
Відновлення резервної копії¶
Синтаксис команди cpio
для відновлення резервної копії:
cpio {-i| --extract} [-E file] [-options] [<device]
Приклад:
cpio -iv </backups/etc.152.cpio | less
Опції | Опис |
---|---|
-i |
Відновлює повну резервну копію. |
-E file |
Відновлює лише ті файли, ім'я яких міститься у файлі. |
--make-directories or -d |
Відновлює відсутню структуру дерева. |
-u |
Замінює всі файли, навіть якщо вони існують. |
--no-absolute-filenames |
Дозволяє відновити резервну копію, зроблену в абсолютному режимі, у відносний спосіб. |
Важливо
За замовчуванням, під час відновлення, файли на диску, дата останньої зміни яких є новішою або дорівнює даті резервної копії, не відновлюються (щоб уникнути перезапису останньої інформації старішою).
Параметр u
, з іншого боку, дозволяє відновити старіші версії файлів.
Приклади:
- Повне відновлення абсолютної резервної копії
cpio –ivF home.A.cpio
- Абсолютне відновлення на існуючій структурі дерева
Параметр u
дозволяє перезаписувати існуючі файли в тому місці, де відбувається відновлення.
cpio –iuvF home.A.cpio
- Відновлення абсолютної резервної копії у відносному режимі
Довгий параметр no-absolute-filenames
дозволяє відновлення у відносному режимі. Насправді /
на початку шляху буде видалено.
cpio --no-absolute-filenames -divuF home.A.cpio
Порада
Створення каталогів, можливо, необхідне, тому використовується опція d
- Відновлення відносної резервної копії
cpio –iv <etc.cpio
- Повне відновлення файлу або каталогу
Відновлення певного файлу або каталогу вимагає створення файлу списку, який потім потрібно видалити.
echo "/etc/passwd" > tmp
cpio –iuE tmp -F etc.A.cpio
rm -f tmp
Утиліти компресії - декомпресії¶
Використання стиснення під час резервного копіювання може мати ряд недоліків:
- Подовжує час резервного копіювання, а також час відновлення.
- Це унеможливлює додавання файлів до резервної копії.
Примітка
Тому краще зробити резервну копію та стиснути її, ніж стискати під час резервного копіювання.
Стиснення за допомогою gzip
¶
Команда gzip
стискає дані.
Синтаксис команди gzip
:
gzip [options] [file ...]
Приклад:
$ gzip usr.tar
$ ls
usr.tar.gz
Файл отримує розширення .gz
.
Він зберігає ті самі права та ті самі дати останнього доступу та змін.
Стиснення за допомогою bunzip2
¶
Команда bunzip2
також стискає дані.
Синтаксис команди bzip2
:
bzip2 [options] [file ...]
Приклад:
$ bzip2 usr.cpio
$ ls
usr.cpio.bz2
Ім’я файлу має розширення .bz2
.
Стиснення за допомогою bzip2
краще, ніж стиснення за допомогою gzip
, але для його виконання потрібно більше часу.
Декомпресія за допомогою gunzip
¶
Команда gunzip
розпаковує стислі дані.
Синтаксис команди gunzip
:
gunzip [options] [file ...]
Приклад:
$ gunzip usr.tar.gz
$ ls
usr.tar
Ім’я файлу скорочується за допомогою gunzip
, а розширення .gz
видаляється.
gunzip
також розпаковує файли з такими розширеннями:
.z
;-z
;_z
.
Декомпресія за допомогою bunzip2
¶
Команда bunzip2
розпаковує стислі дані.
Синтаксис команди bzip2
:
bzip2 [options] [file ...]
Приклад:
$ bunzip2 usr.cpio.bz2
$ ls
usr.cpio
Ім’я файлу скорочується на bunzip2
, а розширення .bz2
видаляється.
bunzip2
також розпаковує файл із такими розширеннями:
-bz
;.tbz2
;tbz
.