Mặc dù lúc đầu, "thử thách" được đề xuất có vẻ khó khăn, không khả thi hoặc nghe có vẻ ngây thơ như một số người đã nhận xét, nhưng không phải vậy. Ý tưởng chính đằng sau việc sử dụng dd để di chuyển từ đĩa lớn hơn sang đĩa nhỏ hơn là hoàn toàn tốt và có lợi ích cho việc di chuyển dữ liệu. Tất nhiên, có đủ không gian trống để dữ liệu bị chiếm trong đĩa đích là một yêu cầu cần thiết.
Ý tưởng là suy nghĩ trong việc tạo từng phân vùng riêng lẻ chứ không phải toàn bộ đĩa cùng một lúc như đề xuất ban đầu. Thậm chí nhiều hơn có thể được thực hiện: (Các) phân vùng sẽ bị cắt ngắn cũng có thể được di chuyển một cách an toàn với một chút trợ giúp của các công cụ định cỡ lại hệ thống tập tin. Thật vậy, kiểu di chuyển như vậy rất thú vị để bảo toàn siêu dữ liệu hệ thống tệp và các thuộc tính tệp mở rộng không thể sao chép dễ dàng bằng các công cụ như cp, rsync, pax, ... hoạt động trong lớp hệ thống tệp và không chặn lớp thiết bị. Sử dụng dd cho thấy sự cần thiết phải cài đặt lại HĐH hoặc phải dán lại tên của FS để tránh các vấn đề với SELinux.
Dưới đây là những gì tôi thường làm để hoàn thành các nhiệm vụ tương tự:
1) Trước tiên, bạn đã giảm (các) hệ thống tập tin trong các phân vùng bị ảnh hưởng sẽ bị cắt ngắn. Đối với điều này, hãy sử dụng công cụ resize2fs (giả sử chúng ta đang nói về một ext2 / ext3 / ext4 fs - các FS hiện đại khác cũng có các công cụ thay đổi kích thước cho cùng một mục đích). Lưu ý rằng mặc dù - vì lý do rõ ràng - một hệ thống tệp không thể lớn hơn phân vùng mà nó nằm trong đó, nó có thể nhỏ hơn một cách an toàn. Thủ thuật an toàn ở đây là giảm "nhiều hơn mức cần thiết". Ví dụ: hãy tưởng tượng bạn có hệ thống tệp 1TB mà bạn muốn di chuyển sang ổ đĩa 500 Gig. Trong trường hợp này, tôi khuyên bạn nên giảm fs xuống, giả sử là 450 Gig (bạn phải có đủ không gian trống cho việc này, tất nhiên, tức là không gian bị chiếm dụng trong hệ thống tệp này không thể vượt quá 450 Gig). 50 Gig không gian bị lãng phí rõ ràng sẽ được sửa sau khi di chuyển dữ liệu.
2) Phân vùng đĩa đích với hình dạng phù hợp xem xét các ràng buộc không gian của nó;
3) dd dữ liệu bằng cách sử dụng (các) thiết bị phân vùng chứ không phải thiết bị đĩa (nghĩa là sử dụng dd if=/dev/sda# of=/dev/sdb#
cho từng phân vùng thay vì sử dụng if=/dev/sda of=/dev/sdb
). LƯU Ý: sda và sdb ở đây chỉ là ví dụ; LƯU Ý QUAN TRỌNG: Khi chuyển từ thiết bị phân vùng lớn hơn sang thiết bị phân vùng nhỏ hơn, dd sẽ phàn nàn về việc cố gắng viết bài vào cuối thiết bị khối, điều đó không sao vì dữ liệu hệ thống tệp sẽ được sao chép hoàn toàn trước khi đến điểm đó. Để tránh thông báo lỗi như vậy, bạn có thể chỉ định kích thước của bản sao bằng cách sử dụng bs=
và count=
các tham số để khớp với kích thước hệ thống tệp bị thu hẹp, nhưng điều này sẽ yêu cầu một số tính toán (đơn giản), nhưng nếu thực hiện sai có thể gây rủi ro cho dữ liệu của bạn.
4) Sau khi lấy dữ liệu, thay đổi kích thước (các) hệ thống tệp tương ứng trong (các) phân vùng đích một lần nữa bằng cách sử dụng resize2fs. Lần này không chỉ định kích thước hệ thống tập tin mới. Khi chạy mà không có đặc tả kích thước, resize2fs sẽ phát triển hệ thống tệp để nó chiếm kích thước tối đa được phép, do đó, trong trường hợp này, hệ thống tệp 450 Gig sẽ phát triển lại để chiếm toàn bộ phân vùng 500 Gig và sẽ không lãng phí byte nào. (Cách tiếp cận "giảm nhiều hơn mức cần thiết" giúp bạn vô tình chỉ định sai kích thước và rủi ro cho dữ liệu của bạn. Lưu ý rằng các đơn vị GB so với GiB có thể khó khăn).
Lưu ý đối với các thao tác phức tạp hơn: Nếu bạn có trình quản lý khởi động mà bạn dự định sao chép, rất có thể là trường hợp này, bạn có thể sử dụng vài KB đầu tiên của đĩa bằng thiết bị đĩa thay vì các thiết bị phân vùng (như dd if=/dev/sda of=/dev/sdb bs=4096 count=5
), và sau đó cấu hình lại hình học trong / dev / sdb (sẽ tạm thời chứa hình học không hợp lệ cho ổ đĩa mới nhưng trình quản lý khởi động nguyên vẹn và hợp lệ). Cuối cùng tiến hành sử dụng các thiết bị phân vùng như được mô tả ở trên để tạo một phân vùng tại một thời điểm. Tôi đã làm các hoạt động như thế này nhiều lần. Gần đây, tôi đã thực hiện thành công việc di chuyển phức tạp khi nâng cấp từ ổ cứng chứa hỗn hợp cài đặt MacOSX & Linux lên SDD nhỏ hơn trong MacMini6,2 của tôi. Trong trường hợp này, tôi đã phải khởi động Linux từ một ổ đĩa ngoài, đã khởi động trình khởi động, chạy gdisk để sửa GPT trong đĩa mới và cuối cùng đã lấy từng phân vùng chứa các tệp tin bị thu nhỏ. (Lưu ý rằng lược đồ phân vùng GPT giữ hai bản sao của bảng phân vùng, một ở đầu và một ở cuối đĩa. gdisk phàn nàn rất nhiều vì nó không thể tìm thấy bản sao thứ hai của PT và vì các phân vùng vượt quá kích thước đĩa, nhưng nó đã khắc phục chính xác vấn đề sao chép PT sau khi bạn xác định lại hình dạng đĩa). Đây là một trường hợp phức tạp hơn nhiều, nhưng đáng nói vì minh họa rằng loại hoạt động này cũng hoàn toàn khả thi.
Chúc may mắn! ... Và quan trọng nhất là nhớ sao lưu tất cả dữ liệu quan trọng trước khi hoạt động như vậy. Một sai lầm và bạn chắc chắn có thể làm hỏng dữ liệu của bạn không thể phục hồi.
Và chỉ trong trường hợp tôi không nhấn mạnh đủ: sao lưu dữ liệu của bạn trước khi di chuyển! :)
dd
tính toán kích thước khối tối ưu là hữu ích