`Dd` sẽ dừng nếu đầu vào lớn hơn đầu ra? (tệp đầu ra là một phân vùng)


-1

Tôi muốn di chuyển một phân vùng đến một vị trí khác trên ổ cứng, tức là nội dung của sda1 đến sda2và sau đó tôi muốn khởi động từ sda2.

Trước hết, tôi không biết liệu điều đó có làm xáo trộn bảng phân vùng hay thứ gì đó khiến nó không thể khởi động được không, nhưng tôi sẽ thử. Đó là phân vùng HFS + và tôi chưa có kinh nghiệm về cách họ cư xử.

Bỏ qua điều đó, nếu tôi cố gắng dd nội dung từ cái này sang cái khác (tôi thực sự đặt nội dung trong một tệp trên một phân vùng lớn hơn), điều gì sẽ xảy ra nếu sda2 hết không gian? Nó sẽ tiếp tục chạy vào phân vùng tiếp theo nằm trên ổ đĩa, hay đơn giản là nó sẽ dừng lại và báo lỗi?

Câu trả lời:


3

Chuyện gì sẽ xảy ra nếu sda2 hết không gian?

Nếu bạn dùng of=/dev/sda2sda2 hết không gian rồi dd sẽ thoát với No space left on device. Một trong những điểm sử dụng các tệp đặc biệt như /dev/sda2 đảm bảo bạn không đọc và viết vượt ra ngoài ranh giới của nó /dev/sda.

Hệ thống tập tin kết quả trên sda2 sẽ bị hỏng, trừ khi nó đủ nhỏ để lắp vào. Nó không phổ biến nhưng có thể có một hệ thống tập tin nhỏ hơn một phân vùng giữ nó. Chỉ trong trường hợp này dd -ing đến một phân vùng nhỏ hơn (đủ lớn) sẽ sao chép toàn bộ hệ thống tập tin.

Nhưng nếu bạn đã sử dụng of=/dev/sdaseek=… để bắt đầu viết chính xác ở đâu sda2 bắt đầu, và nếu if lớn hơn sda2, sau đó dd sẽ vui vẻ viết vượt quá cuối sda2, bởi vì nó đã mở toàn bộ sda và có quyền truy cập vào toàn bộ của nó. Chúng tôi sử dụng sdaN trừu tượng để tránh những rủi ro như vậy.


Được rồi, cái đó có lý. Ngoài ra, giả sử sda2 lớn hơn một chút, có thể chỉ bằng 1 hoặc 2 MB và nó đã chứa một hệ thống tệp trước = sda2. Nếu sda1 là một hệ thống tệp và tôi muốn dd if = sda1 of = sda2, liệu tôi có bị mất sda2 không, hoặc tôi có thể để bất kỳ bit nào được đặt ở đó không?
simernes

@simernes Trong trường hợp này bạn có thể để các bit đó ở cuối. Mọi hệ thống tập tin nên biết nó lớn đến mức nào (hệ thống tập tin lưu trữ thông tin này trong các tiêu đề của chúng, trong trường hợp của bạn tôi nghĩ điều này có liên quan: TotalBlocks trong HFS + ), không gian thừa vượt quá cuối của nó (không hoặc không) không tạo ra sự khác biệt.
Kamil Maciorowski

1

Nếu bạn đang trực tiếp vào of=/dev/sda2:

Các nút thiết bị phân vùng được giới hạn bởi kernel theo bảng phân vùng, vì vậy tất cả các ghi ngoài cuối sẽ trả về -ENOSPC ("Không còn chỗ trống trên thiết bị"). Khi nhận được bất kỳ lỗi ghi, dd sẽ dừng lại.

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.