Adiciona suporte condicional para a flag --ignore-failed-read no tar, permitindo tratamento adequado de avisos em backups

This commit is contained in:
Alexander Sabino 2026-05-07 11:26:33 +01:00
parent 9450217cc2
commit 612ea0abe7
1 changed files with 6 additions and 2 deletions

View File

@ -462,15 +462,19 @@ class BackupService {
'echo "__DBKP_TAR_BEGIN__" 1>&2', 'echo "__DBKP_TAR_BEGIN__" 1>&2',
]; ];
// --ignore-failed-read é extensão GNU tar — não existe no BusyBox tar (Alpine).
// Usar condicionalmente para evitar aborto silencioso com 0 bytes no arquivo.
const gnuFlags = hasGnuTar ? '--ignore-failed-read' : '';
// GNU tar: exit 0 = ok, exit 1 = avisos (arquivos mudaram, permissão negada), exit 2 = erro fatal. // GNU tar: exit 0 = ok, exit 1 = avisos (arquivos mudaram, permissão negada), exit 2 = erro fatal.
// Aceitamos exit 1 como sucesso para não descartar archives válidos com avisos menores. // Aceitamos exit 1 como sucesso para não descartar archives válidos com avisos menores.
if (backupScope === 'container') { if (backupScope === 'container') {
tarParts.push( tarParts.push(
`tar --ignore-failed-read ${tarIncrementalFlag} -czvf - -C / --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=tmp .; TAR_RC=$?; [ $TAR_RC -le 1 ] || exit $TAR_RC` `tar ${gnuFlags} ${tarIncrementalFlag} -czvf - -C / --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=tmp .; TAR_RC=$?; [ $TAR_RC -le 1 ] || exit $TAR_RC`
); );
} else { } else {
tarParts.push( tarParts.push(
`tar --ignore-failed-read ${tarIncrementalFlag} -czvf - -C / ${relSourcePaths.map((item) => shellQuote(item)).join(' ')}; TAR_RC=$?; [ $TAR_RC -le 1 ] || exit $TAR_RC` `tar ${gnuFlags} ${tarIncrementalFlag} -czvf - -C / ${relSourcePaths.map((item) => shellQuote(item)).join(' ')}; TAR_RC=$?; [ $TAR_RC -le 1 ] || exit $TAR_RC`
); );
} }