Mv làm gì trong trường hợp có lỗi?


18

Tôi vừa thử chuyển một cái cây lớn từ đĩa này sang đĩa khác, quá nhỏ. Bây giờ, tôi còn lại một thứ mà tôi thực sự không thể hiểu được - có vẻ như một số tệp thực sự đã bị di chuyển khỏi cây nguồn trong khi các tệp khác chỉ được sao chép. Điều này có lẽ không đúng và tôi chỉ nhìn vào một cái gì đó, giống như tôi đã làm khi tôi kiểm tra vị trí miễn phí trên đĩa đích. : D

Lệnh này đơn giản mv source-dir destination-dir, trong đó cả hai dir nằm trên các đĩa khác nhau. Tôi đang sử dụng mv (GNU coreutils) 7.4. Không ở đâu trong trang man tôi tìm thấy câu trả lời cho các câu hỏi sau:

  • tập tin bị cắt có thể được tạo ra?
  • trong trường hợp có lỗi, liệu mọi thứ trong cây nguồn có bị xóa không?
  • Làm thế nào để phục hồi (một cách dễ dàng và nhanh chóng)?

Câu trả lời:


8

Tôi nghĩ phần giới thiệu của infotrang trả lời tất cả các câu hỏi của bạn:

Đầu tiên, nó sử dụng một số mã giống như được sử dụng bởi `cp -a 'để sao chép các thư mục và tệp được yêu cầu, sau đó (giả sử bản sao đã thành công), nó sẽ xóa bản gốc. Nếu sao chép thất bại, phần được sao chép vào phân vùng đích sẽ bị xóa. Nếu bạn đã sao chép ba thư mục từ phân vùng này sang phân vùng khác và bản sao của thư mục đầu tiên đã thành công, nhưng thư mục thứ hai thì không, thư mục thứ nhất sẽ được để lại trên phân vùng đích và phân vùng thứ hai và thứ ba sẽ được để lại trên phân vùng ban đầu.

Phục hồi không phải là một vấn đề, vì dữ liệu được bảo tồn. Tôi không biết nó cố gắng như thế nào là nguyên tử ( mkdirví dụ: cần kiểm tra nguồn) hoặc nếu đó là trong miền của nó (so với hạt nhân), nhưng có thể có tham nhũng nếu sự gián đoạn xảy ra khi nó đã xóa nguồn. Tại thời điểm đó, bạn đã có một bản sao tốt trong thư mục đích, vì vậy kiểm tra kích thước byte đơn giản có thể thực hiện thủ thuật.

EDIT: Tôi đã thực hiện một số thử nghiệm với các tệp lớn (một vài G) được tạo dd, nhưng không có kết quả cuối cùng. Không bao giờ quản lý để chỉ nhận được một vài nguồn được sao chép - Tôi đã hủy toàn bộ thao tác (quá nhanh) hoặc sau đó không có bất kỳ cơ hội nào do bộ nhớ đệm đĩa và có thể thiết kế hệ thống tệp tốt (^ C của tôi luôn hạ cánh sau khi di chuyển thành công ).


1
Liên quan đến trang thông tin, tôi có hiểu đúng rằng với mỗi thư mục nguồn dòng lệnh , nó sẽ bị xóa nếu bản sao tương ứng thành công? Tôi có nghĩa là mv src1 src2 dstlàm việc trong khía cạnh này tương tự mv src1 dst; mv src2 dstvà mỗi đơn mv src dstlà như thế cp -a src dst && rm -rf srcnào?
maaartinus

1
Đó cũng là cách tôi hiểu nó (chỉ mvs của bạn sẽ là mv && mv). Vì đã cp -ađược đệ quy, tôi nghi ngờ nó áp dụng cho các tệp và thư mục riêng lẻ được tìm thấy trong khi duyệt qua cây. Sẽ làm một số bài kiểm tra sau.
lynxlynxlynx

12

Khi mv đang chuyển sang một hệ thống tập tin khác, trước tiên nó sẽ sao chép tất cả dữ liệu sang hệ thống tập tin mới. Khi dữ liệu mới được sao chép, nó sẽ xóa dữ liệu cũ. Điều này có nghĩa là nếu việc di chuyển bị gián đoạn vì thất bại, vị trí nguồn vẫn sẽ chứa tất cả dữ liệu.

Theo như phục hồi, chỉ có dữ liệu đích nên bị hỏng. Thay vì sử dụng mv để làm lại, chỉ cần sử dụng rsync và sau đó rm bằng tay

rsync -av source-dir/ dest-dir/
rm -rf source-dir
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.