Чому я б націлив один файл?


101

У моїй компанії ми завантажуємо знімок бази даних про локальну розробку як db.dump.tar.gzфайл. Стиснення має сенс, але тарбол містить лише один файл ( db.dump).

Чи є сенс архівувати один файл або це .tar.gzпросто така загальна ідіома? Чому б не просто .gz?


5
На мою думку, це лише питання конвенції. Коли люди бачать файл із розширенням gz, їхнє мислення за замовчуванням - це використання tar -zxvf. Але для тих, хто дивиться на ім'я файлу і бачить, що він не має .tgzрозширення, цілком чудово gzip db-файл дампа. Оскільки я не знаю алгоритмів стиснення докладно, я не впевнений, чи tar робить компресію на розріджені файли, такі як db dump, але для простих текстових файлів прямий gzip файлу має дуже мінімальну перевагу в розмірі перед порівнянням та gzip. ing файл
Мельбурслан

3
Додавання кількох блоків метаданих до початку та в кінці файлу - лише додавання декількох блоків метаданих. Фактичні дані файлу проходять через дьоготь до компресора, не торкаючись. Тож для великого файлу різниця розмірів між звичайним стисненням та тонуванням буде незначною.
підключення

У минулому при спробах різних методів стиснення я виявив, .tar.gzщо перевершує більшість інших поширених методів. Я пам'ятаю, що це було вище справедливого, .tarале не можу пригадати, чи було це краще, ніж просто .gz. За іронією долі .cabформат Window був найкращим методом, який я спробував, що було дуже несподівано.
Фарап

@Pharap tar- це не алгоритм стиснення, це формат архівування
gardenhead

1
@gardenhead Ну, це пояснило б, чому це не дуже добре.
Фарап

Відповіді:


163

Переваги використання .tar.gzзамість цього .gzє

  • tarзберігає більше метаданих (дозволи UNIX тощо), ніж gzip.
  • налаштування можна легше розширити для зберігання декількох файлів
  • Файли .tar.gz дуже поширені, лише gzipped файли можуть спантеличувати деяких користувачів. (пор. коментар Мельбурслана )

Витрати на використання tarтакож дуже малі.

Якщо це не дуже потрібно, я все одно не рекомендую орієнтуватись на один файл. Існує багато корисних інструментів, які можуть отримати доступ до стислих одиночних файлів безпосередньо (наприклад zcat, zgrepтощо), також існують для bzip2та xz).


35
Я не враховував аспект метаданих. Дуже хороший момент
садок

5
Якщо я бачу .gz, мій перший інстинкт - це tar -zxf foo.gz. Пам'ятаючи, що gzip - це навіть команда, займає ще кілька секунд.
bgStack15

2
@ bgStack15 FWIW вам не потрібен z(або -для цього питання), більшість сучасних tars автоматично визначить файл, який потрібно декомпресувати.
drewbenn

2
За замовчуванням gzipзберігатиметься оригінальне ім'я файлу та штамп часу. Щоб -Nвідновити їх, ви можете скористатися параметром при розпакуванні.
Росс Рідж

@RossRidge дякую, я знову видалив текст про оригінальну назву файлу.
jofel

63

Ви фактично задаєте лише половину запитання. Інше питання: "Чому я стискаю файл tar з gzip?". І відповідь не лише в тому, що gzipробить файл меншим (у більшості випадків):

tar:

  • зберігає ім’я файлу та інші метадані : режим, ідентифікатор власника, ідентифікатор групи, розмір файлів, час модифікації
  • зберігає контрольну суму (лише для заголовка)

gzip:

  • може зберігати оригінальне ім'я файлу, але це необов'язково
  • має контрольну суму CRC-32 над вихідними даними
  • він стискає файл

Тільки tarви не можете бути впевнені, що ваші дані не були пошкоджені. Тільки gzipви не можете відновити ідентифікатор користувача / групи, час модифікації та, можливо, не оригінальне ім'я файлу.

Поєднання є більш потужним, ніж надають окремі доробки / формати, оскільки вони доповнюють особливості один одного .


Дякуємо, що пояснили це! Коли я читав сторінку tarвікіпедії, я неправильно зрозумів опис, що означає, що контрольна сума була на весь файл.
садок

Мені це здається правильною відповіддю. Я також додам ще декілька причин, які ви, можливо, хочете редагувати, якщо ви погоджуєтесь. 1) адміністратору немає додаткових витрат на .tgz над .tar або .gz: вони всі лише одна команда. 2) Адміністратори створюють резервні копії, копіюють, переміщують, переміщують багато файлів з безлічі різних причин; Резервне копіювання БД - лише одне з таких. Вони можуть використовувати однакові робочі процеси, інструменти та команди, резервне копіювання одного чи кількох файлів; то чому б спеціальна шафа використовувала синтаксис команди gzip для випадку, коли є один файл?
Деві Морган

30

Існує досить велика перевага у використанні тільки- стиснутий GZIP текстові файли - вміст можуть бути доступні безпосередньо з допомогою інструментів командного рядка , як less, zgrep, zcat.


Цікавий момент, але питання полягає в зйомці бази даних, навряд чи це текстовий файл, а не лише gzipped.
підкреслюй_d

9
@underscore_d всі мої демпінгові бази даних (в основному mysql та pgsql) - це текстові звалища, почасти тому, що вони є більш корисними, якщо щось трапляється частково пошкоджує дамп, а частково тому, що я можу попередньо обробити будь-яке відновлення за допомогою звичайних інструментів (sed , awk, perl тощо), якщо мені потрібно. тобто надійніші та корисніші, ніж двійкові відвали. Вигода полягає в тому, що текстові відвали мають тенденцію бути більшими (кому все одно? Дисковий простір дешевий, а у нас хороша компресія), а відновлення значно повільніше (але менше, якщо ви відновите відновлення в транзакції).
cas

1
Яка перевага цих інструментів у тому, щоб просто прокладати вихід декомпресора в звичайний інструмент?
CodesInChaos

21

Я б сказав, що, ймовірно, люди просто не розуміють, що можуть використовувати gzip / bzip2 / xz без дьогтю. Можливо, тому, що вони надходять з фонового режиму DOS / Windows, де нормально інтегрувати стиснення та архівування в єдиному форматі ( ZIP , RAR тощо).

Хоча в деяких ситуаціях можуть бути невеликі переваги щодо використання tar через збереження метаданих або можливість додавання додаткових файлів, є й недоліки. За допомогою простого файлу gzip / bzip2 / xz ви можете розпаковувати його та передавати декомпресовані дані прямо в інший інструмент (наприклад, у вашу базу даних), без необхідності зберігати декомпресовані дані у вигляді файлу на диску. З тарболом це складніше.


2
З GNU tar потрібен лише перехід на вихід до stdout, тому я б не сказав, що це набагато важче!
Гайд

5
Перший абзац видається досить правдоподібним для файлів, що використовують tgzрозширення. Однак, у випадку з ОП використовується tar.gz- і якщо ці гіпотетичні екс-Win / DOS користувачі схожі на мене, перше, що вони говорять, дивлячись на такий файл, це: "Чому він має 2 розширення?". Потім вони google і швидко отримують відповідь, яка конкретно пояснює, що tarі стиснення відрізняються. ;-)
підкреслюй_d

17

Існує важлива відмінність, яку можна зробити за допомогою tarважливих за певних обставин: окрім "метаданих", які @jofel згадував у своїй відповіді, tar записує ім'я файлу в архів. Витягуючи його, ви отримуєте оригінальне ім'я файлу незалежно від того, як називається архів.

У вашому випадку архів дьоготь і файл містить мають відповідні назви db.dump.tar.gzі db.tar, але припустимо , що ви перейменувати дьоготь файл 20-Apr-16.dump.tgz, або будь-який інший . Зніміть це tar xvfz, і ви отримаєте db.dump. Для порівняння, розпакуйте 20-Apr-16.dump.gzі у вас є 20-Apr-16.dump. (Редагувати: як зазначено в коментарях, gzip також записує ім'я файлу; але він зазвичай не використовується при розпакуванні). tarАрхів може також містити відносний шлях до файлу , який поміщає витягнутий файл в підкаталозі.

Ваш випадок використання буде диктувати, чи потрібна така наполегливість назви файлів, або навіть потрібна , чи насправді небажана. Але безумовно, незалежно від стиснення, tarархів переміщується інакше, ніж звичайний файл.


6
gzip також записує оригінальне ім'я файлу.
psusi

8
Так. Ім'я в заголовку gzip необов’язкове - очевидно, його не буде, якщо ви стиснули потоковий вихід команди - і більшість інструментів не відновить його за замовчуванням (наприклад, ви повинні використовувати gzip --nameявно при декомпресії), але вам не потрібно використовувати tar, щоб отримати стійкість імені файлу.
Майлз

Дякую, що вказав на це, я цього не знав. Тим не менш, оскільки це не поведінка за замовчуванням, справа полягає в тому, що при розподілі файлу у форматі tar зберігається оригінальне ім'я файлу (і, можливо, відносний шлях), без втручання одержувача. Розповсюдження (g) заархівованого файлу не означає.
alexis

8

Окрім усіх інших відповідей, нещодавно я потрапив у сценарій ситуацій, коли очікувався лише один файл, але попередній співробітник написав сценарії з можливістю створення декількох файлів. Таким чином, файли були відмечені та завантажені, потім передані та розширені.

Коли процес зростав до точки, він створив файл 4,3 ГБ, він перекинувся і створив .dump.001 файл на додаток до файлу .dump. Усі сценарії просто працювали.

Тобто визначена проактивна сисадмінова лінь!


2

Я б націлив на один файл, щоб скопіювати його, зберігаючи часову позначку (яку легко не помітити при завантаженні). Дозволу на файли та право власності є менш важливими: завантаження - це термін, який застосовується до систем, які недостатньо інтегровані.

Незалежно від того, було б це чи ні, це звичайна практика стиснення файлу, щоб швидше завантажувати файли - і уникати втрати дискового простору.


-1

Тар особливо корисний для декількох файлів, не записаних у формальну файлову систему, це завжди було. Якщо з якоїсь причини є час від часу, лише один файл, який слід записати, це не має реального наслідку. Я можу отримати свій .tar.gz безпосередньо до / dev / sdx, не зважаючи на розділ чи файлову систему. Це може бути і стрічка.

Зазвичай це робиться тому, що сценарій або процес скопійовано з коду спадщини. Звичайно, немає необхідності орієнтуватися, якщо є лише один файл, але це залишає місце для вдосконалення до кількох файлів ......

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.