tar: Thoát với trạng thái lỗi do lỗi trước đó


78

Tôi đã viết một đoạn script nhỏ để nén và nén danh sách các thư mục + tệp.

Tập lệnh dường như chạy thành công, trong đó tệp .tar.gz có thể sử dụng được tạo sau khi tập lệnh chạy.

Tuy nhiên, tôi nhận được thông báo khó chịu này sau khi kịch bản kết thúc:

tar: Thoát với trạng thái lỗi do lỗi trước đó

Tôi không thấy bất kỳ thông báo lỗi nào trong khi tập lệnh đang hoạt động, và như tôi đã nói, tập tin được sản xuất có thể không bị nén mà không có cảnh báo / lỗi. Vì tôi đang sử dụng điều này như một phần của bản sao lưu của mình, tôi muốn chắc chắn rằng tôi không bỏ qua điều gì nghiêm trọng.

Các lý do có thể khiến thông báo lỗi / cảnh báo này được tạo ra là gì - và tôi có thể bỏ qua nó một cách an toàn không?. Nếu tôi không thể bỏ qua nó, các bước để chẩn đoán và khắc phục lỗi là gì?

Tôi đang chạy trên Ubuntu 10.0.4

Câu trả lời:


100

Bạn sẽ nhận được thông báo đó nếu vì bất kỳ lý do gì, tar không thể thêm tất cả các tệp được chỉ định vào tar. Một nếu phổ biến nhất là không có quyền đọc trên một trong các tệp. Đây có thể là một vấn đề lớn vì bạn đang sử dụng điều này để sao lưu. Nếu bạn đang sử dụng -vcờ, hãy thử bỏ nó đi. Điều này sẽ làm giảm sản lượng và cho bạn thấy những gì đang xảy ra.


8
+1 cho đề xuất (trước đây tôi đã sử dụng tùy chọn 'dài dòng'). Tôi thấy rằng có một vấn đề về quyền đối với ít nhất một trong các tệp. Ít nhất bây giờ tôi biết làm thế nào để giải quyết điều này. cảm ơn nhiều
morpheous

có sử dụng sudo đã khắc phục sự cố
whizcreed

bỏ cờ -v là lời khuyên tuyệt vời và giúp tôi giải quyết vấn đề của mình. 'verbose' che khuất nguyên nhân của sự thất bại đằng sau một bức tường văn bản
scottyseus

22

vấn đề là đối số, fđối số lấy tiếp theo làm tên tệp, vì vậy nó phải là đối số cuối cùng

tar cvzf output.tgz folder

hoặc là

tar -cvzf output.tgz folder

là như nhau và không có lỗi.


Giải quyết vấn đề của tôi. Tôi đã thử tar -zcvfp đưa ra lỗi nhưng khi thử tar -zxvpf thì tất cả đều ổn. Cảm ơn.
Mian Asbat Ahmad

6

Đôi khi sao lưu các tệp có thể thay đổi trong quá trình sao lưu như logfiles, bạn có thể thấy tùy chọn tar hữu ích '--ignore-fail-read' (Tôi đang sử dụng Debian Linux, không chắc chắn cho non gnu tar).

Đầu ra tiêu chuẩn và lỗi có thể được chuyển hướng trong 2 tệp khác nhau với nội dung như:

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

Tôi thấy điều này nói chung là an toàn, nhưng xin hãy cẩn thận vì tar sẽ không dừng lại ...


5

Tôi đã có cùng một vấn đề và không có câu trả lời nào ở trên làm việc cho tôi. Tuy nhiên, tôi thấy rằng việc chạy lệnh sau đã hoạt động:

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

Các lỗi được đề cập đến tar: Exiting with failure status due to previous errorscó thể được xác định bằng cách tắt tùy chọn -v. Khi xem xét, các lỗi đến từ các thư mục như /run/sys.

Bằng cách loại trừ các thư mục này, nó hoạt động tốt. Hy vọng điều này sẽ giúp bất cứ ai có vấn đề tương tự.


3

Tôi đã từng gặp vấn đề tương tự. Tất cả những gì tôi đã làm là xóa dấu gạch ngang ("-") khỏi lệnh.

Thay vì gõ nó như

tar -cvfz output.tar.gz thư mục /

hãy thử gõ nó như

thư mục tar cvfz output.tar.gz /

Tôi không biết tại sao dấu gạch ngang gây ra vấn đề trong trường hợp của tôi nhưng ít nhất nó đã hoạt động.


6
Bạn có thể đã thử nghiệm điều này với GNU tar. Sự nhầm lẫn của bạn xuất phát từ việc nó chấp nhận hai kiểu tùy chọn khác nhau - tùy chọn tar "kiểu cũ" không có dấu gạch ngang và tùy chọn "unix tiêu chuẩn" với dấu gạch ngang. Các tùy chọn với dấu gạch ngang yêu cầu một đối số của một tùy chọn để theo tùy chọn. Vì vậy, trong trường hợp này, đối số cho -fnên output.tar.gzvà không được có zở giữa. Nếu không sắp xếp lại các tùy chọn, nó sẽ chính xác là : tar -cvf output.tar.gz -z folder/. Kiểu cũ hy vọng tất cả các tùy chọn ở một nơi và tất cả các đối số theo sau.
pabouk

Xem tài liệu tar của GNU và ví dụ trang Tru64 UNIX .
pabouk

@pabouk Nhận xét đó có vẻ xứng đáng là một câu trả lời của chính nó. Vui lòng thêm nội dung của nhận xét đó làm câu trả lời cho câu hỏi này để tín dụng đi đến nơi tín dụng đáo hạn.
cwallenpoole

Tôi cũng gặp vấn đề, nhưng đó là một tệp có tên -v nên rõ ràng tar có một số lỗi liên quan đến những tệp nào nó có thể sao lưu ... đây không phải là vấn đề. cách giải quyết của tôi vì rm và mv sẽ không hoạt động, là sử dụng trình quản lý tệp. vì vậy rõ ràng mv và rm cũng có lỗi. tôi đã thử mv '-v' v và rm '-v' nhưng nhận được thông báo lỗi. tar đề cập đến nó không thể thống kê các tập tin tar. đã sử dụng -cfjv
Jim Michaels

1

Bạn đã hiểu nhầm một câu trả lời trước đó. Vấn đề không phải là -, đó là nơi fnằm trong danh sách đối số của bạn.

tar cvfz target.tgz <files>

Sẽ cố gắng tạo một kho lưu trữ gọi là "z", vì đó là văn bản sau f. Thông báo lỗi là do tar không thể tìm thấy "target.gz" để thêm vào kho lưu trữ "z".

tar cvzf target.tgz <files>

Sẽ tạo chính xác target.tgz và thêm tệp vào đó. Điều này là do target.tgz là văn bản đầu tiên sau fđối số.


Điều này nên được thêm vào như là một bình luận cho câu trả lời "nhầm lẫn". Thật không may, bạn sẽ được phép thêm ý kiến ​​như vậy chỉ sau khi đạt được 50 điểm danh tiếng. Đối với chủ đề: Bạn đã kiểm tra nó? Tôi đã thử nghiệm nó với GNU tar 1.26 và các biến thể có và không có dấu gạch ngang thực sự khác nhau như được mô tả trong phần trả lời của jack. Nó hành xử như nó được viết trong bài trả lời.
pabouk

0

Thông thường bạn có thể bỏ qua tin nhắn đó. Nếu có bất kỳ thay đổi nào (chẳng hạn như xóa tệp / sáng tạo / sửa đổi) đối với cây thư mục cơ bản trong quá trình tạo tar, nó sẽ ném thông báo đó. Ngoài ra nếu có các tệp đặc biệt như nút thiết bị, fifos, v.v., chúng sẽ gây ra cảnh báo đó.

Bạn có chắc chắn không thể xem bất kỳ tập tin thủ phạm nào không? Thử vớitar cvfz yourtarball.tgz /your/path


0

Tôi đã có một vấn đề tương tự đối với một tập tin tôi đã nhận được. Hóa ra tôi không có quyền viết các tập tin trong kho lưu trữ do root sở hữu. Sử dụng sudo đã sửa nó.


0

Một trong những lý do để có được lỗi này cho người mới bắt đầu là
Họ quên thực hiện các thao tác trong thư mục chứa các tệp
Tới vị trí đó và thực hiện lệnh 
Vì các tập tin của tôi nằm trong máy tính để bàn 
~ / Máy tính để bàn # tar - cf xong.tar abc xyz
Trong đó xyz và abc là các tệp và chúng tôi đang lưu trữ các tệp đó trong xong.tar
Nếu chúng ta đi và thực hiện lệnh ở vị trí khác, chúng ta sẽ gặp lỗi trên 

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.