tar: Önceki hatalardan dolayı başarısızlık durumundan çıkma


78

Dizinler + dosyalar listesini tars ve sıkıştıran küçük bir senaryo yazdım.

Betik başarılı bir şekilde çalışıyor gibi görünmektedir, çünkü betik çalıştırıldıktan sonra kullanılabilir bir .tar.gz dosyası oluşturulmuştur.

Ancak senaryo bittikten sonra bu sinir bozucu mesajı alıyorum:

tar: Önceki hatalardan dolayı başarısızlık durumundan çıkma

Senaryo çalışırken herhangi bir hata mesajı göremiyorum ve dediğim gibi, üretilen dosya herhangi bir uyarı / hata olmadan sıkıştırılmamış olabilir. Bunu yedeğimin bir parçası olarak kullandığımdan, ciddi bir şeyi göz ardı etmediğimden emin olmak istiyorum.

Bu hata / uyarı mesajının üretilmesinin olası nedenleri nelerdir - ve güvenle yok sayabilir miyim? Görmezden gelemezsem, hatayı teşhis ve çözme adımları nelerdir?

Ubuntu 10.0.4 ile çalışıyorum

Yanıtlar:


100

Herhangi bir nedenden dolayı, tar belirtilen tüm dosyaları tar'a ekleyemezse, bu mesajı alacaksınız. Bunlardan en yaygın olanı, dosyalardan birinde okuma izninin olmaması. Bu yedekleme için kullandığınızdan beri bu büyük bir sorun olabilir. -vBayrağı kullanıyorsanız, bırakmayı deneyin. Bu çıktıyı azaltmalı ve neler olduğunu görmenize izin vermelidir.


8
Öneri için +1 (daha önce 'ayrıntılı' seçeneğini kullanıyordum). Dosyalardan en az birinde izin sorunu olduğunu buldum. En azından şimdi bunun nasıl çözüleceğini biliyorum. çok teşekkürler
morpheous

evet, sudo kullanarak sorunu çözdü
whizcreed 17:15

-v bayrağını kesmek harika bir tavsiye ve sorunumu çözmeme yardımcı oldu. 'ayrıntılı' bir metin duvarının arkasındaki başarısızlığın nedenini gizliyor
scottyseus

22

sorun argümandır, fargüman bir sonraki dosya adıdır, bu yüzden argümanın sonuncusu olmalı

tar cvzf output.tgz folder

veya

tar -cvzf output.tgz folder

aynı ve alma hatası yok.


Sorunumu çözdüm. Tar-zcvfp hata veriyordu fakat tar-zxvpf denendiğinde her şey yolundaydı. Teşekkürler.
Mian Asbat Ahmad,

6

Bazen, yedekleme sırasında logfiles gibi değişebilecek dosyaları yedekleyerek tar '--ignore-fail-read' tar seçeneğini bulabilirsiniz (Debian Linux'tayım, gnu tar için emin değilim).

Standart çıktı ve hata 2 farklı dosyaya şu şekilde yönlendirilebilir:

LOGDIR='/var/log/mylogdir' 
LOG=${LOGDIR}/backup.log 
ERRLOG=${LOGDIR}/backup.error.log 
DATE=$(date +%Y-%m-%d)
HOSTNAME=$(hostname)
DATA_DIRS='/etc /home /root'

tar --ignore-failed-read -f ${BACKUP_DIR}/${HOSTNAME}-${DATE}.tgz -cvz ${DATA_DIRS} > $LOG 2> $ERRLOG

Bunu genel olarak güvenli buluyorum ama katran durmayacak olsa da lütfen dikkatli olun ...


5

Aynı sorunu yaşıyordum ve yukarıdaki cevapların hiçbiri benim için çalıştı. Ancak, aşağıdaki komutu çalıştırmanın işe yaradığını öğrendim:

tar -cpzf /backups/fullbackup.tar.gz --exclude=backups --exclude=proc --exclude=tmp --exclude=mnt --exclude=sys --exclude=dev --exclude=run /

Bahsedilen hatalar tar: Exiting with failure status due to previous errors-v seçeneği kapatılarak tanımlanabilir. İncelemenin ardından hatalar gibi dizinlere geldi /runve /sys.

Bu dizinleri dışlayarak, gayet iyi çalışıyor. Umarım bu benzer bir sorunu olan herkese yardımcı olur.


3

Ben de aynı problemi yaşadım. Tek yaptığım komut satırından ("-") işaretini kaldırmaktı.

Olarak yazmak yerine

tar -cvfz output.tar.gz klasörü /

yazmayı deneyin

tar cvfz output.tar.gz klasörü /

Benim durumumda çizgi neden sorun yarattığının farkında değilim ama en azından işe yaradı.


6
Muhtemelen bunu GNU tar ile test ettin. Karışıklığınız, iki farklı seçenek stilini kabul etmesinden kaynaklanıyor - bir çizgi olmadan "eski stil" tar seçenekleri ve bir çizgi ile "standart unix" seçenekleri. Kısa çizgi ile ilgili seçenekler, seçeneği takip etmek için bir seçeneğin argümanını gerektirir. Yani bu durumda argüman -folmalı output.tar.gzve aralarında olmamalıdır z. Seçeneklerin yeniden sıralama olmadan doğru olacaktır: tar -cvf output.tar.gz -z folder/. Eski stil tüm seçenekleri tek bir yerde bekler ve tüm argümanlar izler.
pabouk


@pabouk Bu yorum kendi başına bir cevap olmaya layık görünüyordu. Lütfen bu yorumun içeriğini bu sorunun cevabı olarak ekleyin, böylece kredi kredinin geldiği yere gider.
cwallenpoole

Ayrıca problemlerim vardı, ama -v isminde bir dosyaydı, bu yüzden görünüşe göre tar hangi yedekleyebileceği konusunda bazı hatalar var ... bu bir sorun olmamalı. rm ve mv'nin işe yaramayacağı geçici çözümüm bir dosya yöneticisi kullanmaktı. Görünüşe göre mv ve rm de buggy 'dir. Ben mv '-v' v ve rm '-v' denedim ama hata mesajları aldım. tar, tar dosyasını bulamadı. -cfjv kullanıyordu
Jim Michaels

1

Daha önceki bir cevabı yanlış anladınız. Sorun değil -nerede olduğunu fsizin argüman listesi içindedir.

tar cvfz target.tgz <files>

"Z" adında bir arşiv oluşturmaya çalışacak, bundan sonraki metin f. Hata mesajı, tar "z" arşive eklenecek "target.gz" dosyasını bulamadığı içindir.

tar cvzf target.tgz <files>

Doğru target.tgz oluşturacak ve dosya ekleyecektir. Bunun nedeni target.tgz'nin fargümandan sonraki ilk metin olmasıdır .


Bu "şaşkın" cevabına yorum olarak eklenmelidir. Ne yazık ki, bu tür yorumları yalnızca 50 puan kazandıktan sonra eklemenize izin verilir. Konuya göre: Test ettiniz mi? Bunu GNU tar 1.26 ile test ettim ve tire işaretli ve çizgi olmayan değişkenler, kriko cevabında açıklandığı gibi gerçekten farklı. Cevapta yazıldığı gibi davranır.
pabouk

0

Genellikle bu mesajı yok sayabilirsiniz. Katran oluşturma sırasında dizin ağacında herhangi bir değişiklik (dosya silme / oluşturma / değiştirme gibi) varsa, bu mesajı atar. Ayrıca, cihaz düğümleri, beşler vb. Gibi özel dosyalar varsa, bu uyarıya neden olurlar.

Suçlu dosya göremediğinizden emin misiniz? İle deneyintar cvfz yourtarball.tgz /your/path


0

Aldığım bir dosyayı kaldırırken benzer bir sorunla karşılaştım. Arşivdeki dosyaları root'un sahip olduğu arşivlere yazma iznim olmadığı ortaya çıktı. Sudo kullanarak düzeltti.


0

Yeni başlayanlar için bu hataları almanın bir nedeni de
Dosyaların bulunduğu dizinde işlem yapmayı unuturlar
Bu konuma gidin ve komutu yerine getirin 
Dosyalarım masaüstünde olduğu gibi 
~ / Desktop # tar - cf done.tar abc xyz
Xyz ve abc dosyalarında ve o dosyaları done.tar'da saklıyoruz
Gidip komutu başka bir yerde gerçekleştirirsek hatanın üstesinden geliriz 

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.