Đảo ngược mở rộng gốc FS


7

Khi cài đặt Raspbian, điều đầu tiên bạn được yêu cầu là mở rộng hệ thống tệp để trải dài trên toàn bộ thẻ SD. Công trình tuyệt vời. Nhưng nếu tôi muốn tiết kiệm không gian khi làm ảnh đĩa. Tôi có thể đảo ngược việc mở rộng và kết thúc bằng một hình ảnh đĩa nhỏ mà tôi có thể sử dụng để sao chép hệ thống của mình sang các thẻ SD khác và sau đó mở rộng lại trên chúng không?


1
~ " bạn được bảo phải làm ". Đã nói với ai?
IgorGanapolsky

Câu trả lời:


9

[Nếu tất cả những gì bạn muốn làm là thu nhỏ phân vùng trên thẻ, có một cách đơn giản hơn để làm điều này hơn là giải thích ở đây trước tiên bằng cách sử dụng resize2fstrên hệ thống tệp, sau đó sử dụng fdiskđể thu nhỏ phân vùng; cần có nhiều ví dụ về điều này trên mạng, ví dụ, tại Unix & Linux . Phương pháp dưới đây liên quan đến việc tạo một hình ảnh thẻ mới, nhỏ hơn. Dù bằng cách nào, bạn không thể làm điều này với một hệ thống đang chạy.]

Bạn không thể thu nhỏ hình ảnh thiết bị (mặc dù bạn có thể thu nhỏ một hệ thống tệp riêng lẻ resize2fs), nhưng bạn có thể tạo một trong bất kỳ kích thước nào và sao chép nội dung của một hệ thống khác. Tôi sẽ thảo luận điều này liên quan đến Raspbian nhưng nó cũng tương tự đối với bất kỳ hệ thống GNU / Linux nào khác.

Một hình ảnh thiết bị là dành cho mục đích của chúng tôi một byte hoàn chỉnh cho byte bản sao của một phương tiện thiết bị khởi động như một thẻ SD, có thể chứa số không hay nhiều phân vùng hệ thống tập tin. Điều này khác với một hình ảnh hệ thống tập tin , là một byte cho bản sao byte của một phân vùng duy nhất. Xem ở đây để biết thêm về những khác biệt quan trọng.

Câu trả lời này mô tả cách tạo hình ảnh thiết bị với các phân vùng hệ thống tệp trong đó, nhưng các phân vùng đó sẽ trống. Sau đó, bạn cần phải sao chép nội dung của từng phân vùng theo câu trả lời khác của tôi ở đây . Đây là phương pháp linh hoạt nhất.

Một số lệnh này cần được chạy root nên tôi khuyên bạn chỉ nên su root. Bạn có thể sử dụng chính pi để làm điều này nếu bạn có dung lượng lưu trữ đủ lớn.

Có hai phân vùng trong hình ảnh Raspbian, phân vùng khởi động nhỏ đầu tiên và hệ thống tập tin gốc lớn thứ hai. Ngoài ra còn có một bảng phân vùng, aka. bản ghi khởi động chính (MBR), vì đây là hình ảnh thiết bị . MBR rất quan trọng và chiếm 512 byte đầu tiên trong ảnh.

Một hình ảnh thiết bị bắt đầu như một tập tin trống. Bạn cần phải quyết định bạn muốn nó lớn đến mức nào; du -hdfcó thể hữu ích trong vấn đề này (xem man duman df; tất cả các lệnh bên dưới cũng có các trang man có giá trị ít nhất là một cái nhìn).

Tôi sẽ sử dụng một cái nhỏ làm ví dụ.

dd if=/dev/zero of=test.img bs=4096 count=10240

Đó là ~ 40 MiB; tổng kích thước được xác định bởi bs* count, đơn vị mặc định là byte. Tập tin trống này bây giờ có thể được coi là một thiết bị.

fdisk test.img

Fdisk có tính tương tác và sẽ lưu ý rằng "thiết bị không chứa bảng phân vùng được công nhận". Điều đầu tiên bạn phải làm là tạo một cái. Một thiết bị được định dạng MBR sử dụng bảng phân vùng DOS và fdisklệnh để tạo o.

Command (m for help): o
Created a new DOS disklabel with disk identifier 0xe7a0dfdf.

Bạn có thể thấy bảng trống với p. Bây giờ chúng ta cần tạo hai phân vùng mới với n.

Command (m for help): n

Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-79999, default 2048): 8192

Lưu ý tôi đã không sử dụng giá trị mặc định; 8192 là những gì được sử dụng trong các hình ảnh Raspbian thực tế và dường như là một thông lệ phổ biến với thẻ SD. 1 Trong hình ảnh Raspbian, phân vùng này là ~ 56 MB và do đó kết thúc tại sector 122879. Nó không phải lớn như vậy nhưng bạn cũng có thể sao chép mô hình. Tuy nhiên, trong ví dụ này không có đủ dung lượng, vì vậy tôi đã sử dụng 10 MB:

Last sector, +sectors or +size{K,M,G,T,P} (8192-79999, default 79999): +10M

Theo mặc định, loại phân vùng là "Linux". Chúng ta cần thay đổi điều đó.

Command (m for help): t

Selected partition 1
Hex code (type L to list all codes): c

Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'.

Bây giờ phân vùng thứ hai.

Command (m for help): n

Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): 

Using default response p.
Partition number (2-4, default 2): 2
First sector (2048-79999, default 2048): 28672

Thông báo lại tôi đã không sử dụng mặc định; bởi vì chúng tôi đã để lại không gian trống ở đầu, fdisk vẫn muốn sử dụng nó. Thay vào đó tôi đã sử dụng khu vực 2 số sau khi lĩnh vực cuối cùng của phân vùng đầu tiên, bạn có thể tìm thấy trong bảng phân vùng (đó là End).

Đối với khu vực cuối cùng, tôi đã chọn giá trị cao nhất có thể (79999) để điền vào toàn bộ tệp hình ảnh.

Khi đã tạo xong, bảng trông như thế này:

Device    Boot     Start       End Blocks  Id System
test.img1           8192     28671  10240   c W95 FAT32 (LBA)
test.img2          28672     79999  25664  83 Linux

Đó là tất cả những gì chúng ta cần ở đây, nhưng để chống lại những sai lầm, fdisk không thực sự làm gì cho đến khi bạn nhấn w. Tại thời điểm đó, nó sẽ viết ra bảng mới và thoát. Để kiểm tra:

> file test.img 
test.img: ; partition 1 : ID=0xc, start-CHS (0x0,130,3), end-CHS     (0x1,200,7), startsector 8192, 20480 sectors; partition 2 : ID=0x83, start-CHS (0x1,200,8), end-CHS (0x4,249,53), startsector 28672, 51328 sectors

Nó được công nhận là một thiết bị có phân vùng hệ thống tập tin. Những người cần phải được định dạng. Để làm điều này, chúng ta cần chỉ ra các vùng thích hợp của tệp hình ảnh dưới dạng các hệ thống tệp cho HĐH. Đầu tiên:

losetup -o 4194304 /dev/loop1 ./test.img
losetup -o 14680064 /dev/loop2 ./test.img

Các -ogiá trị offset ( ) này là các Startsố từ bảng phân vùng, 8192 và 28672, nhân với kích thước đơn vị (512). Bây giờ chúng tôi có các phân vùng thiết bị có thể được định dạng:

> mkfs.vfat -F32 /dev/loop1
mkfs.fat 3.0.27 (2014-11-12)
Loop device does not match a floppy size, using default hd params
> mkfs.ext4 /dev/loop2

Đó là cảnh báo về kích thước đĩa mềm có thể được bỏ qua. Lệnh thứ hai sẽ tạo ra nhiều đầu ra hơn nhưng không nên có bất kỳ lỗi nào được báo cáo. Bây giờ chúng ta có thể kiểm tra các hệ thống tập tin; đầu tiên loại bỏ các thiết bị lặp với losetup -D, sau đó tạo một vài thư mục và mountphân vùng hình ảnh ở đó:

mkdir one; mkdir two
mount -o offset=4194304 -t vfat test.img one
mount -o offset=14680064 -t ext4 test.img two

Điều này sẽ không báo cáo bất kỳ lỗi nào (nếu bạn nhận được "vòng lặp chồng chéo", xem tại đây và tìm kiếm trang cho "vòng lặp chồng chéo"). onesẽ trống, và twonên có một lost+foundthư mục trong đó.

Bây giờ bạn có thể sao chép bất cứ điều gì bạn muốn vào những điểm gắn kết, ví dụ, bạn có thể lặp lại một pi sử dụng rsync, theo đó khác Q & A liên kết trước đó . Khi bạn hoàn tất, umountcác thư mục và bạn có thể ddtest.img vào thẻ SD và sử dụng nó.


1. Nếu bạn đang cố sao chép một số hình ảnh / thẻ khác ngoài hình ảnh Raspbian, bạn có thể nhận được những con số này bằng cách xem bảng phân vùng của hình ảnh / thẻ theo cùng một cách fdisk.

2. Nói chung, các đơn vị được sử dụng bởi fdisk được chỉ định khi bạn xem bảng phân vùng (ví dụ Units: sectors of 1 * 512 = 512 bytes) nhưng hãy cẩn thận rằng nó cũng có thể được tham chiếu Blockstrong bảng (như trên) là 1 KiB. Điều này có thể gây nhầm lẫn bởi vì StartEndsố liệu không nằm trong "khối", chúng nằm trong các đơn vị được chỉ định ở trên cùng. Ở đây là 1/2 KiB, do đó, khoảng cách giữa các số liệu này gấp đôi số lượng Blocks. Không phải tất cả các phiên bản fdisklàm điều này, một số báo cáo Sectors, có ý nghĩa hơ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.