Как проверить архив tar.gz до распаковки
Как проверить tar.gz до распаковки: команды gzip и tar, коды завершения и пять реальных примеров. Почему список файлов и даже код 0 не гарантируют пригодность резервной копии.

В этой статье
Архив имеет ожидаемый размер и открывается в файловом менеджере. Это полезный признак, но перед восстановлением стоит проверить его точнее. У файла tar.gz есть как минимум два уровня: сжатый поток gzip и структура архива tar внутри. Их проверка решает разные задачи.
Сначала проверьте gzip
Инструкция рассчитана на GNU gzip и GNU tar в Linux. Файл backup.tar.gz — пример имени уже полностью записанного архива. Перед проверкой убедитесь, что процесс резервирования или копирования завершён.
gzip -t -- backup.tar.gz
Команда проверяет целостность сжатого потока без извлечения содержимого в каталог. Обычно успешная проверка не печатает развёрнутый отчёт; для сценария важен код завершения. Ошибка должна сохраняться в результате, а не теряться из-за следующей команды.
Большой архив будет прочитан целиком. Учитывайте дисковую нагрузку и не запускайте множество проверок одновременно на томе, который уже испытывает проблемы.
Посмотрите, что лежит внутри
Для списка объектов tar:
tar -tzf backup.tar.gz
Это просмотр, а не распаковка. Сверьте ожидаемые каталоги, имена и наличие нужных компонентов. Для подробного списка с метаданными применяется вариант -tvzf.
Если список слишком велик, сначала уточните состав резервной копии по её описанию. Пропуск вывода через программу, которая завершится после первых строк, может оборвать чтение архива раньше конца. Такой просмотр нельзя выдавать за полноценную проверку всего содержимого.
Что показала проверка на небольшом стенде
2 октября 2026 года мы проверили команды в изолированном Linux-окружении с GNU tar 1.35 и GNU gzip 1.12. Учебный архив good.tar.gz содержал site/index.html и db.sql; SQL-файл был текстовым образцом, а не копией рабочей базы. Другие варианты создали из этих же тестовых данных. Рабочие сайты и резервные копии клиентов не использовались; извлечение файлов не выполнялось.
Вариант файла | gzip -t | tar: код и список | Следующий шаг |
|---|---|---|---|
good.tar.gz: два учебных файла | 0 | 0; site/index.html, db.sql | Сверить состав, затем отдельно проверять восстановление. |
truncated.tar.gz: удалены последние 8 байт | 1 | 2; оба имени успели появиться | Получить полную копию; напечатанные имена не отменяют ошибку. |
not-tar.gz: сжатый текст длиной 2688 байт | 0 | 2; списка нет | Уточнить формат: целый gzip-поток не обязательно содержит tar. |
files-only.tar.gz: только файл сайта | 0 | 0; site/index.html | Если схема требует базу, найти её согласованную копию. |
short-text.gz: сжатый текст длиной 41 байт | 0 | 0; список пуст | Не принимать нулевые коды за наличие ожидаемых компонентов. |
Для корректного учебного архива список выглядел так:
site/index.html
db.sql
У обрезанного файла gzip сообщил:
gzip: truncated.tar.gz: unexpected end of file
При чтении того же файла tar сначала напечатал оба имени, а затем завершился с кодом 2 и сообщениями:
gzip: stdin: unexpected end of file
tar: Child returned status 1
tar: Error is not recoverable: exiting now
Короткий текст в gzip дал особенно полезный контрпример: в этой версии GNU tar команда завершилась без ошибки и ничего не перечислила. Поэтому критерий предварительной проверки — успешные команды плюс ожидаемый состав. Даже эти условия ещё не подтверждают пригодность восстановления.
Как сохранить результат, а не потерять код ошибки
В обычном интерактивном Bash сохраните код сразу после проверяемой команды. В примере ниже список и ошибки записываются в отдельные файлы текущего каталога; выберите свободные имена, чтобы не затереть предыдущий отчёт.
gzip -t -- backup.tar.gz 2>gzip-check-errors.txt
gzip_rc=$?
tar --list --gzip --force-local --file=backup.tar.gz >archive-files.txt 2>tar-check-errors.txt
tar_rc=$?
printf 'gzip=%s tar=%s\n' "$gzip_rc" "$tar_rc"
В этом GNU tar параметр --force-local трактует двоеточие в имени файла как часть локального пути. Ненулевой результат или неожиданный список требуют разбора до распаковки. Если проверка включена в сценарий с set -e, используйте явную обработку неудачи через if: простой сценарий может завершиться до присваивания переменной.
Назначение проверки сжатого потока и коды результата описаны в руководстве GNU gzip.
Просмотр объектов без извлечения описан в руководстве GNU tar. Эти проверки стоит сохранить вместе с размером, временем создания и ожидаемым составом архива.
Проверьте смысл содержимого
Предположим, архив целый, но внутри только файлы сайта без базы данных. Для статического проекта этого может хватить, а для интернет-магазина — нет. Нужно знать, какие компоненты входят в принятую схему резервирования и как они согласованы по времени.
Посмотрите на неожиданные абсолютные пути, переходы к родительским каталогам и символические ссылки. Недоверенный архив не следует извлекать с повышенными правами в рабочую директорию. Проверка списка не делает его содержимое безопасным для исполнения.
Чего эти команды не доказывают
Успех проверки gzip и чтения tar не гарантирует бизнес-целостность базы данных, пригодность конфигурации или возможность запустить приложение. Даже полный список ожидаемых файлов не подтверждает, что резервная копия была сделана в согласованном состоянии.
Отдельно нужна проверка восстановления в изолированном окружении. Там оценивают запуск приложения и контрольные данные, не отправляя реальные письма и не обращаясь к боевым платёжным сервисам. В этой инструкции восстановление не выполняется.
Как оформить результат
Запишите имя архива, время его создания, размер, результат проверки gzip и результат чтения структуры tar. Если существует доверенная контрольная сумма, добавьте её сравнение отдельным пунктом. Не называйте архив проверенным восстановлением, если вы только прочитали список.
При ошибке сохраните исходный файл и сообщение, затем проверьте источник и процесс передачи. Не распаковывайте повреждённый архив поверх действующего сайта в надежде, что «основные файлы целые». Цель предварительного контроля — выявить проблему до того, как восстановление начнёт менять рабочие данные.
An archive has the expected size and opens in a file manager. This is a useful sign, but you should verify it more thoroughly before restoration. A tar.gz file has at least two levels: the gzip compressed stream and the tar archive structure inside. Verifying each level solves different tasks.
First, check gzip
This instruction is designed for GNU gzip and GNU tar in Linux. The file backup.tar.gz is an example of a fully written archive name. Before verification, ensure that the backup or copy process is complete.
gzip -t -- backup.tar.gz
The command verifies the integrity of the compressed stream without extracting the contents to a directory. Usually, a successful check does not print a detailed report; for a script, the exit code is what matters. An error must be preserved in the result, not lost due to the next command.
A large archive will be read in its entirety. Consider disk load and do not run multiple checks simultaneously on a volume that is already experiencing issues.
See what is inside
For the list of objects in tar:
tar -tzf backup.tar.gz
This is a preview, not an extraction. Verify the expected directories, names, and presence of required components. For a detailed list with metadata, use the -tvzf variant.
If the list is too large, first clarify the backup composition based on its description. Skipping output through a program that terminates after the first few lines can interrupt archive reading before the end. Such viewing must not be presented as a full verification of the entire contents.
What the test on a small stand showed
On October 2, 2026, we tested the commands in an isolated Linux environment with GNU tar 1.35 and GNU gzip 1.12. The sample archive good.tar.gz contained site/index.html and db.sql; the SQL file was a text sample, not a copy of a working database. Other variants were created from the same test data. No live customer websites or backups were used, and no file extraction was performed.
File variant | gzip -t | tar: exit code and file list | Next step |
|---|---|---|---|
good.tar.gz: two sample files | 0 | 0; site/index.html, db.sql | Verify the contents, then separately check the restoration. |
truncated.tar.gz: last 8 bytes removed | 1 | 2; both names appeared in time | Obtain a full copy; printed names do not cancel the error. |
not-tar.gz: compressed text 2688 bytes long | 0 | 2; no list available | Clarify the format: a raw gzip stream does not necessarily contain a tar archive. |
files-only.tar.gz: only the site file | 0 | 0; site/index.html | If the schema requires a database, locate its consistent copy. |
short-text.gz: compressed text of 41 bytes | 0 | 0; the list is empty | Do not treat zero exit codes as confirmation of the presence of expected components. |
For a correct sample archive, the list looked like this:
site/index.html
db.sql
The truncated gzip file reported:
gzip: truncated.tar.gz: unexpected end of file
When reading the same file, tar first printed both names, then exited with code 2 and the following messages:
gzip: stdin: unexpected end of file
tar: Child returned status 1
tar: Error is not recoverable: exiting now
The short text in gzip provided a particularly useful counterexample: in this version, GNU tar completed without error and listed nothing. Therefore, the preliminary check criterion is successful commands plus the expected composition. Even these conditions do not yet confirm recovery suitability.
How to preserve the result, not lose the error code
In a standard interactive Bash session, save the exit code immediately after the command being checked. In the example below, the file list and errors are written to separate files in the current directory; choose unused names to avoid overwriting previous reports.
gzip -t -- backup.tar.gz 2>gzip-check-errors.txt
gzip_rc=$?
tar --list --gzip --force-local --file=backup.tar.gz >archive-files.txt 2>tar-check-errors.txt
tar_rc=$?
printf 'gzip=%s tar=%s\n' "$gzip_rc" "$tar_rc"
In this GNU tar version, the --force-local parameter treats a colon in the filename as part of the local path. A non-zero result or an unexpected file list requires parsing before extraction. If the check is included in a script with set -e, use explicit error handling via if: a simple script may terminate before the variable is assigned.
The purpose of the compressed stream check and the meaning of the result codes are described in the GNU gzip manual.
Inspecting objects without extraction is described in the GNU tar manual. These checks should be retained alongside the archive size, creation time, and expected contents.
Verify the meaning of the contents
Assume the archive is intact but contains only website files without a database. This may suffice for a static project, but not for an online store. You need to know which components are included in the accepted backup scheme and how they are synchronized in time.
Look for unexpected absolute paths, parent directory transitions, and symbolic links. Do not extract an untrusted archive with elevated privileges into the working directory. Checking the file list does not make its contents safe to execute.
What these commands do not prove
Success of gzip verification and tar reading does not guarantee database business integrity, configuration suitability, or the ability to run the application. Even a complete list of expected files does not confirm that the backup was created in a consistent state.
Separate verification of restoration in an isolated environment is required. There, application startup and control data are evaluated without sending real emails or contacting live payment services. This instruction does not perform restoration.
How to record the result
Record the archive name, its creation time, size, gzip verification result, and tar structure reading result. If a trusted checksum exists, add its comparison as a separate item. Do not label an archive as a verified restoration if you have only read the file list.
On error, save the original file and the message, then check the source and transfer process. Do not unpack a corrupted archive over a live site hoping that "core files are intact." The purpose of preliminary control is to identify the issue before restoration begins modifying live data.





Обсуждение 0
Делись опытом и задавай вопросы. Комментарии без ссылок появляются после проверки редактором.
Пока никто не написал. Начни обсуждение.