Làm thế nào một hệ thống tập tin có thể được sao chép chính xác như là?


10

Tôi có một hệ thống tập tin cho một thiết bị tôi đang lập trình mà tôi muốn tạo một bản sao chính xác. Lý tưởng nhất là tôi muốn bản sao này giống hệt với thư mục mà nó đã được sao chép từ đó. Tôi đã cố gắng sử dụng cp -r cp -arsync -azvPcố gắng để đạt được điều này. Mỗi cái mặc dù dẫn đến một thư mục có kích thước khác nhau (sử dụng du -s) và cuối cùng, mặc dù thiết bị của tôi hết thư mục gốc, nhưng nó sẽ không chạy khỏi thư mục mà tôi đã sao chép.

  • Điều gì đang bị bỏ qua mà các lệnh tôi đã sử dụng không chiếm?
  • Có thể giữ mọi thứ giống hệt nhau khi sao chép một hệ thống tập tin / thư mục? Nếu vậy làm thế nào tôi sẽ làm điều đó?

PS Tôi đã đăng một câu hỏi tương tự trên StackOverflow nhưng nhanh chóng nhận ra tôi đã hỏi nó trên trao đổi sai


Chỉnh sửa: Điều này có thể không hữu ích nhưng cho dù tôi sử dụng phương pháp nào thì thư mục đã sao chép luôn khiến máy bị nghi vấn là Kernel Panic với đầu ra sau.

VFS: Không thể mount fs gốc thông qua NFS, thử đĩa mềm. VFS: Không thể mở thiết bị gốc "nfs" hoặc khối không xác định (2.0) Vui lòng nối thêm tùy chọn khởi động "root =" chính xác; đây là các phân vùng có sẵn: 1f00
64 mtdblock0 (driver?) 1f02 64 mtdblock2 (driver?) 1f04 2432 mtdblock4 (driver?) 1f05 128 mtdblock5 (driver?) 1f06 4352 mtdblock6 (driver?) 1f07 204928 mtdblock8 (trình điều khiển?) 0800
8.388.608 sda tài xế: sd Kernel Panic - không đồng bộ: VFS: không thể để gắn kết fs gốc trên chưa biết-block (2,0)


5
Sự khác biệt về duđầu ra không phải là một chỉ số cho thấy nội dung không giống nhau.
Ignacio Vazquez-Abrams

Thiết bị của tôi sẽ không khởi động bằng thư mục được sao chép. Tôi đang lấy đó làm chỉ số và tự hỏi chính xác mình đang làm gì sai mà hệ thống tệp được sao chép không được xử lý giống nhau
TopGunCoder

Bạn cần xác định chính xác những gì bạn đang cố gắng làm. rsync -ahoặc cp -athực hiện các bản sao chính xác của các thư mục, nhưng bạn đang cố sao chép một đĩa khởi động, có một vài điều bạn cần làm để hoàn thành nó.
Forcefsck

1
Những loại thiết bị? Những loại hệ thống tập tin? Những loại phương tiện lưu trữ?
michas

1
Đối với tôi có vẻ như bạn muốn sử dụng một cái gì đó như dd if=/some/location of=/some/other/location bs=4Mđể đọc và ghi dữ liệu.

Câu trả lời:


12

Tôi thường sử dụng một trong những lựa chọn thay thế sau:

  • rsync -aHAX(thêm v cho tính dài dòng) đảm bảo rằng bạn giữ bất kỳ cấu trúc liên kết và x-attrs nào trong thư mục đích trong khi sao chép. Đừng quên acó nghĩa là lưu trữ và bảo tồn thời gian, quyền sở hữu và quyền.
  • Đơn giản tar cvf(không nén để tiết kiệm thời gian, chỉ cần sử dụng chúng) là những gì tôi sử dụng nếu cái đầu tiên không đáp ứng những gì tôi cần vì bất kỳ lý do gì và tôi không có thời gian, nhưng tôi luôn thử cái đầu tiên.

Để kiểm tra xem mọi thứ đã diễn ra như bình thường, bạn có thể chạy diff -r <folder1> <folder2>sau nếu muốn.


1
Điều này đã lừa Tôi cũng chỉ cần đảm bảo rằng thiết bị tôi đang khởi động (thông qua NFS) đã bị tắt và không thể truy cập hệ thống tệp trong khi bản sao đang diễn ra.
TopGunCoder

1
Ah, khách hàng NFS với quyền truy cập đọc-ghi đôi khi có thể làm gia vị!
bayindirh

3
Điều này sẽ không sao chép trên các tệp thưa thớt mà không có -S. Đó có thể là một phần của sự du -skhác biệt. Tôi đã từng rsync -axXSAHsao chép mọi thứ qua. -X sẽ chỉ sao chép trong hệ thống tệp chứ không phải các tệp được gắn từ hệ thống tệp khác.
Victor Roetman

Thế còn - id -eric?
0x2207

@ 0x2207 Nó chỉ hữu ích khi người dùng có ID số khác nhau trên các hệ thống khác nhau (ví dụ: hbayindir người dùng ở cả hai hệ thống và có UID 1000 trên nguồn và 1536 ở đích). Tôi không bao giờ phải sử dụng tùy chọn đó, vì tôi cần giữ nguyên chủ sở hữu thực sự, không phải UID và GID. Nếu người dùng không có mặt nguồn hoặc đích, ID số được sử dụng làm dự phòng.
bayindirh

4

Đọc câu trả lời của bạn trong các bình luận có vẻ như bạn có thể đang cố sao chép thư mục gốc ("Thiết bị của tôi sẽ không khởi động bằng thư mục được sao chép"). Trong trường hợp đó, có một số điều bạn nên làm.

$ cd /
$ mkdir backups

$ tar -cvpf /backups/fullbackup.tar --directory=/ --exclude=proc --exclude=sys \
     --exclude=dev/pts --exclude=backups .

Khi bạn đã sao chép thư mục gốc vào hệ thống mới, bạn sẽ cần cập nhật grub trước khi khởi động.

$ grub-install --recheck /dev/sdX (Where X is the partition number)
$ update-grub

+1 Tôi nghĩ đầu mối nằm trong thông báo khởi động thất bại trong OP và điều này giải quyết nó.
msw

Khi nó bật ra một cái gì đó rất giống với điều này làm việc. Tôi đã xử lý một hệ thống tập tin (FS) trên máy mà tôi cần sao chép. Tất cả chỉ cần cho tôi để tar csau đó tar xnó. Mặc dù vậy, kicker là để đảm bảo rằng máy của tôi đã tắt vì tôi đã khởi động nó bằng cách sử dụng FS cục bộ với máy của tôi, nhưng từ xa đến thiết bị mà tôi đang khởi động (Tôi đã khởi động thiết bị thông qua NFS)
TopGunCoder

grub-install: error: embedding is not possible, but this is required for cross-disk install.
Vitaly Zdanevich

2

Bạn có thể thử FSArchiver . Nó là sự kế thừa cho phần tương tự, hiện không được làm rõ. Tôi đã sử dụng cả partimage và FSArchiver trong quá khứ và cả hai đều hoạt động tốt. Theo như tôi biết, cả hai đều tạo ra các bản sao của một hệ thống tập tin gần giống với bản gốc nhất có thể. Tôi nghĩ rằng FSArchiver mạnh hơn một chút so với partimage. Ví dụ, nó hoạt động với ext4, trong khi partimage thì không. Xem bảng so sánh FSArchiver / partimage .


2

Sử dụng duđể so sánh các thư mục vốn đã rắc rối. Nếu bạn muốn thực sự so sánh 2 thư mục hoàn toàn dựa trên kích thước của chúng thì hãy sử dụng dunhư thế này:

$ du -sh --apparent-size <dir>

Công tắc này sẽ báo cáo kích thước thư mục so với dung lượng ổ đĩa mà nó tiêu thụ khi được lưu trữ trên phương tiện ổ đĩa vật lý. Đĩa được tổ chức thành các khối và các tệp được ghi vào các khối này. Nếu một tệp chỉ cần BLOCK + 1 dung lượng, nó sẽ tiêu tốn 2 dung lượng BLOCK, và đây là những gì duthông thường báo cáo. Hãy nhớ tên của công cụ là sử dụng đĩa!

Nếu bạn đang xử lý những gì nghe giống như toàn bộ hệ thống tập tin, tôi sẽ có xu hướng sử dụng ddđể tạo một bản sao chính xác của phân vùng mà thư mục đang bật

$ dd if=/dev/sda1 of=/srv/boot.img

Sau đó, bạn có thể sử dụng điều này boot.imgđể khôi phục phân vùng bất cứ nơi nào bạn muốn.

$ dd if=/srv/boot.img of=/dev/sdb1

du cũng sẽ báo cáo kích thước trên đĩa (vì vậy các tệp thưa và liên kết cứng chiếm ít không gian hơn). Ví dụ, du -sh /varcho 21G nhưng du -sh --apparent-size /varcho 209G trên hệ thống của tôi.
Victor Roetman

0

Nó phụ thuộc một chút vào những gì bạn có nghĩa là "giống hệt".

  • Chỉ cần làm là rsyncsẽ tốt hầu hết thời gian. Đôi khi bạn muốn sử dụng tarđể đóng gói mọi thứ trong một tệp và giải nén nó ở nơi khác.
  • Nếu bạn muốn một bản sao của hệ thống tệp hoàn chỉnh, bạn có thể sử dụng ddđể sao chép toàn bộ hệ thống tệp.

Nếu bạn có bất kỳ ý nghĩa nào để gỡ lỗi thiết bị của mình, hãy thử tìm hiểu xem chính xác vấn đề tại sao thiết bị hiện không chạy được.

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.