Hình ảnh của thẻ 16Gb chứa khoảng trống chưa phân chia ở cuối: Có thể cắt bớt?


18

Tôi muốn chuẩn bị một bản phân phối cho một số bạn bè.
Vì tôi không có bất cứ điều gì khác nằm xung quanh, tôi đã sử dụng thẻ SD 16Gb.

Tôi đã bắt đầu với hình ảnh Debian Weeklyzy 2Gb mặc định và không thực hiện thay đổi kích thước.
Bây giờ, như tôi đã hoàn thành, tôi muốn tạo một hình ảnh về những gì tôi đã làm, nhưng tôi nhận được một tệp 16Gb, chứa 14Gb không gian không phân chia (không phân vùng và miễn phí) ở cuối.

[Tôi đã sử dụng Windows // Win32DiskImager vì tôi không có gì miễn phí để dính vào rPI ngay bây giờ]

Tôi có thể cắt bớt tập tin hình ảnh ngay phía sau không gian được phân vùng và chuyển phần đầu vào một thẻ nhỏ hơn không?


2
Nếu bạn có quyền truy cập vào máy tính linux, hãy chạy dd if=/dev/path/to/SD/card of=~/SpecialImage.img, sau đó cài đặt GParted và chạy gparted ~/SpecialImage.img. Khi GParted mở .imgtệp của bạn , chỉ cần thay đổi kích thước các phân vùng theo ý thích của bạn! (Cả hai lệnh phải được chạy dưới quyền root, sudo susẽ cung cấp cho bạn những gì bạn cần. Khi $chuyển sang a #, bạn là Root. Hãy cẩn thận, đây là tương đương với Linux của Chúa.) GParted về cơ bản là giao diện GUI cho quản lý partiton phức tạp công cụ bạn sẽ cần. Sử dụng GParted chỉ làm cho mọi thứ trở nên đơn giản và dễ dàng hơn để thành công.
JamesTheAwgieDude

Vui lòng đọc kỹ câu hỏi của tôi.
Nippey

Vâng, tôi đã đọc câu hỏi của bạn và tôi có thể nói với bạn rằng chỉ cần cắt bớt hình ảnh đĩa là nguy hiểm. Chắc chắn, bạn chỉ có thể cắt bớt các byte cuối cùng của hình ảnh, nhưng không có người bảo đảm nào mà bạn không vô tình cắt bỏ bất kỳ tệp nào, đặc biệt là khi Linux cố tình loại bỏ các tệp của nó . Thêm vào đó, có thể có một số siêu dữ liệu quan trọng ở cuối hệ thống tệp hoặc một cái gì đó tương tự. Nhìn chung, đặt cược an toàn hơn để sử dụng các tiện ích thay đổi kích thước hệ thống tệp thích hợp hơn là cố gắng tự mình rút hết phần cuối của tệp.
JamesTheAwgieDude

1
Vâng, nhưng tôi đang nói về không gian không liên kết. Ngay cả Linux cũng sẽ không đưa bất kỳ dữ liệu nào vào Không gian đĩa được đánh dấu là không liên kết mà vẫn nằm trong khối như được ghi trong Bảng phân vùng. Mối quan tâm của tôi là do định dạng tệp hình ảnh: Có thể, tệp hình ảnh có siêu dữ liệu nằm ở cuối tệp, vì vậy tôi đã lo lắng khi cắt thông tin tệp. (Hy vọng nhận xét trước đây của tôi không quá khó khăn, sry;)
Nippey

Ohh, tôi hiểu những gì bạn đang nói bây giờ. Nếu bạn lo lắng về bất kỳ không gian trống nào bị hỏng, thì hãy chạy GParted trên hình ảnh sau khi bạn cắt bớt nó. Nó có thể sẽ liệt kê khu vực cuối cùng là "chưa phân bổ" hoặc "bị hỏng" - tạo một phân vùng "chưa được định dạng" mới trong không gian đó. Sau đó, bạn sẽ không có bất kỳ vấn đề. :)
JamesTheAwgieDude

Câu trả lời:


33

Cuối cùng tôi đã tìm thấy một nguồn tài nguyên đang giải thích câu hỏi của tôi.

http://softwarebakery.com/shrinking-images-on-linux

Ngắn:

Vâng, cắt ngắn là có thể!

Tóm tắt quá trình:

Trích xuất thông tin phân vùng từ hình ảnh bằng cách sử dụng fdisk:

$ fdisk -lu image.img
Disk image.img: 4096 MB, 4096000000 bytes, 8000000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000a1bc7

      Device Boot      Start         End      Blocks   Id  System
image.img1              2048     5872026     5869978    b  W95 FAT32

Chúng tôi thấy rằng phân vùng có kích thước khoảng 2,8Gb (5872026 * 512), phần còn lại là không liên kết .

Vì vậy, mọi thứ sau khi kết thúc phân vùng có thể được gỡ bỏ.
Điều này sẽ được thực hiện với các công cụ truncate. Đừng quên thêm 1 vào số lượng ngành, vì số khối bắt đầu từ 0.

$ truncate --size=$[(5872026+1)*512] image.img


Chỉnh sửa:

Đối với những người quá lười biếng để chuyển sang Linux:
Ngoài hoạt động trên Windows với Cygwin 's fdisk.exetruncate.exe!

Cygwin là gì?

Tôi có thể trích dẫn: "Cygwin: Cảm giác Linux đó - trên Windows" ( https://www.cygwin.com/ ).
Nó là một tập hợp các tệp thực thi có thể chạy trong Windows, nhưng cung cấp tất cả các chương trình dòng lệnh mà bạn thường biết từ Linux. Cygwin có thể mất nhiều thời gian để cài đặt nếu bạn chọn mọi gói trong khi cài đặt, nhưng để làm theo ví dụ này, chỉ cần đảm bảo rằng bên cạnh cấu hình mặc định, các gói util-linux(fdisk) và coreutils(cắt ngắn) cũng được chọn.
Tùy thuộc vào môi trường của bạn, người đàn ông của bạn cần thêm /usr/bin/usr/sbinvào của bạn $PATH.


1
Tôi cần cài đặt gói nào để có được fdisk.exetruncate.exe?
PythonNut

1
Xin chào @PythonNut, tôi đã cập nhật câu trả lời của mình ở trên và thêm các gói bắt buộc: o)
Nippey

Điều gì xảy ra nếu phân vùng có kích thước của đĩa, ngay cả khi ít được sử dụng?
piegames

5

Tôi biết đây là một câu hỏi cũ, nhưng tôi muốn trình bày cách thực hiện quy trình này trên Mac, vì nó không dễ dàng như vậy: fdiskkhông có -ltùy chọn và truncatekhông được cài đặt theo mặc định:

1. Bước 1: Cài đặt cắt ngắn trên Mac OS X:

Bạn cần MacPorts hoặc Homebrew cho việc này. Tôi sử dụng MacPorts. Nếu bạn không có một trong số này, hãy tiếp tục và cài đặt chúng trước. Liên kết với MacPorts

Bây giờ, chúng ta có thể cài đặt cắt ngắn . Mở Terminal của bạn và gõ:

sudo port install truncate

Để cài đặt bia:

brew install truncate

Điều này nên làm điều đó.

2. Sử dụng tiện ích đĩa để gắn kết IMG của chúng tôi để nó hiển thị với lệnh thiết bị đầu cuối Diskutil .

Bạn sẽ thấy trong giây lát tại sao chúng ta cần bước này. Mở ứng dụng Disk Utility. Nhấp vào Tệp (trên thanh trên cùng) -> Mở Ảnh đĩa và chọn tệp IMG của bạn.

3. Kiểm tra kích thước phân vùng của IMG và nơi nó được gắn kết.

Trên Terminal, gõ:

diskutil list

Và nó sẽ hiển thị một cái gì đó như thế này, ở đâu đó cuối cùng:

/dev/disk3 (disk image):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        +16.0 GB    disk3
   1:             Windows_FAT_32 boot                    62.9 MB    disk3s1
   2:                      Linux                         3.9 GB     disk3s2

Vì vậy, chúng tôi thấy rằng khoảng 12 GB là không liên kết. Chúng ta cần cắt bớt những cái đó.

Lý do chúng ta cần lệnh này là để kiểm tra xem ảnh đĩa được gắn ở đâu. Trong trường hợp của tôi, nó nằm dưới: / dev / đĩa3

4. Tìm hiểu kích thước phân vùng thực tế.

3,9 GB và 62,9 MB là các giá trị sẽ không hoạt động với cắt ngắn. Chúng ta cần tìm kích thước phân vùng theo byte.

5. Chạy fdisk .

Trong Terminal của bạn, hãy chạy lệnh này:

   fdisk /dev/diskX

Trong đó X là số mà bạn đã tìm ra trong bước trước. Điều này sẽ dẫn đến một cái gì đó như thế này:

         Starting       Ending
 #: id  cyl  hd sec -  cyl  hd sec [     start -       size]
------------------------------------------------------------------------
 1: 0C    0 130   3 -    8  40  32 [      8192 -     122880] Win95 FAT32L
 2: 83    8  40  33 -  478  79  49 [    131072 -    7553024] Linux files*
 3: 00    0   0   0 -    0   0   0 [         0 -          0] unused      
 4: 00    0   0   0 -    0   0   0 [         0 -          0] unused      

6. Thời gian để cắt ngắn !

Trên thiết bị đầu cuối của bạn, cdvào thư mục mà hình ảnh của bạn là. Sau đó, viết:

truncate FILE SIZE

FILE là tập tin của bạn tất nhiên.

KÍCH THƯỚC là kích thước tính bằng byte. Những gì tôi đã làm là thêm vào cột kích thước của fdisklệnh, cột bắt đầu và nhân với 512. Vì vậy, trong trường hợp của tôi, SIZE sẽ là: 512 * (7553024 + 131072) = 3934257152 , xấp xỉ 3,9 GB.

Bạn sẽ cần bắt đầukích thước của phân vùng cuối cùng được hiển thị bởi fdisk. (Không nhất thiết phải là lớn nhất, nhưng là phần cuối của tệp IMG)

Tôi đã thử nghiệm một chút và bất cứ khi nào tôi nhập 7553024 * 512 hoặc (7553024 + 1) * 512 byte, tệp IMG đã bị hỏng. Vì vậy, chỉ để chắc chắn, làm điều đó như tôi chỉ ra ở trên. Nó có thể thêm nhiều hơn thực sự cần thiết, nhưng nó là một lựa chọn an toàn.

7. (Tùy chọn) Dễ dàng kiểm tra nếu IMG không bị hỏng.

Truy cập một lần nữa vào Tiện ích đĩa và thử mở tệp IMG mới như trước. Nếu nó gắn kết, bạn cũng có thể thấy kích thước mới (nhỏ hơn) . Nếu nó không gắn kết, một cái gì đó đã đi sai. (Có thể cố gắng tăng kích thước trong truncatelệnh)

Đây không phải là thử nghiệm tốt nhất, nhưng đây là một cách chắc chắn để kiểm tra xem IMG mới có bị hỏng hay không. Vì vậy, đừng thực sự tin tưởng vào nó, nhưng nó đáng để thử ...

Tôi hy vọng ai đó tìm thấy điều này hữu ích!


1
Đẹp quá Cảm ơn bạn đã mở rộng kiến ​​thức :) Thật tốt khi bạn chỉ ra rằng 512*(Size+1)nó không hoạt động. Như bạn có thể thấy, tôi đã sử dụng Endvà không Size, vì bạn phải giữ cả hai phân vùng nếu có nhiều hơn một. Vì vậy, sử dụng 7553024 + 131072( +1) là chính xác 100%!
Nippey

1

Win32DiskImager gần đây thực sự có một tùy chọn chỉ bao gồm các phân vùng được phân bổ trong hình ảnh đĩa. Điều này sẽ làm cắt tỉa trong một cú nhấp chuột.

nhập mô tả hình ảnh ở đây


Tuyệt vời, làm cho nó dễ dàng hơn nhiều trên Windows!
Nippey

0

Chỉ là một cái gì đó tôi đã nhận thấy gần đây khi tôi thực hiện rất nhiều thao tác Win32diskimg này để sao lưu hình ảnh RPI của mình để triển khai. Gần đây tôi đã bắt đầu thử nghiệm fstrim SD "cắt tỉa" để làm sạch các bộ phận của thẻ SD không được sử dụng để cân bằng hao mòn theo lý thuyết. Không chắc chắn về hiệu ứng nó sẽ có nhưng một tác dụng phụ là khi tôi chụp ảnh phân vùng SD 16GB và sau đó sử dụng 7zip để nén nó. Tôi đã chuyển từ 16 GB thông thường sang 9,5 GB thành một tệp 2,5 GB. Bây giờ tôi đang thử nghiệm để đảm bảo không có gì sai nhưng có vẻ như việc sử dụng TRIM để đánh dấu không gian chưa sử dụng là 0 làm cho việc nén hình ảnh hiệu quả hơn rất nhiều (điều này có ý nghĩa). Chỉ muốn báo cáo lúc này là siêu dễ thực hiện và không có nhiều bước.


Mặc dù không sai nhưng nó không thực sự giải quyết được câu hỏi.
RalfFriedl
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.