Зображення карти 16Gb, що містить в кінці нерозподілений простір: можливе підключення?


18

Я хотів підготувати дистрибутив для деяких друзів.
Оскільки у мене не було нічого іншого, я використав SD-карту 16 Гбіт.

Я почав із зображення за замовчуванням Debian Weezy 2Gb і не змінював розміри.
Тепер, коли я закінчую, я хотів створити образ того, що я зробив, але я отримав файл 16Gb, що містить в кінці 14Gb нерозподіленого (не розділеного та вільного) простору.

[Я використовував Windows // Win32DiskImager, оскільки у мене немає нічого вільного, щоб прямо зараз потрапляти в rPI]

Чи можу я просто обрізати файл зображення прямо за розділеним простором та перенести провідну частину на меншу карту?


2
Якщо у вас є доступ до комп'ютера Linux, запустіть dd if=/dev/path/to/SD/card of=~/SpecialImage.img, а потім встановіть GParted та запустіть gparted ~/SpecialImage.img. Як тільки GParted відкриє ваш .imgфайл, просто змініть розміри розділів на свій смак! (Обидві команди повинні бути запущені як корінь, sudo suповинні отримати вам те, що вам потрібно. Коли $переходите на a #, ви є Root. Будьте уважні, це еквівалент Божого Linux.) GParted - це в основному інтерфейс GUI для управління таємними партіями. інструменти, які вам знадобляться Використання GParted просто робить все набагато простішим і схожим на успіх.
JamesTheAwesomeDude

Плісе уважно прочитайте моє запитання.
Nippey

Так, я читаю ваше запитання, і можу вам сказати, що просто обрізання образу диска небезпечно. Звичайно, ви можете просто відрізати останні байти зображення, але немає гарантії, що ви не випадково відмените жодні файли, тим більше, що Linux навмисно видаляє свої файли . Крім того, можуть бути важливі метадані в кінці файлової системи або щось подібне. Це в цілому більш безпечна ставка на використання належної утиліти для зміни розміру файлової системи, ніж намагатися самостійно відключити кінець файлу.
JamesTheAwesomeDude

1
Добре, але я кажу про нерозподілений простір. Навіть Linux не буде розміщувати жодних даних на Дисковому просторі, які позначаються нерозподіленими, але залишаються в блоці, як написано в таблиці розділів. Моє занепокоєння викликало формат файлу зображень: можливо, що файл зображення має метадані, що лежать в кінці файлу, тому я переживав, як скоротити інформацію про файл. (Сподіваюсь, мій попередній коментар не звучав занадто важко, грі;)
Nippey

О, я розумію, що ти зараз кажеш. Якщо вас турбує будь-який зіпсований вільний простір, запустіть GParted на зображенні після того, як ви його обрізали. Ймовірно, буде перераховано останню область як "нерозподілену" або "пошкоджену" - створити новий "неформатований" розділ у цьому просторі. Тоді у вас не виникне жодних проблем. :)
JamesTheAwesomeDude

Відповіді:


33

Нарешті я знайшов ресурс, який пояснює моє питання.

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

Короткий:

Так, обрізання можливе!

Короткий огляд процесу:

Витяг інформації про розділ із зображення за допомогою 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

Ми бачимо, що розділ має розмір близько 2,8 Гб (5872026 * 512), решта - нерозподільна .

Отже, все після закінчення перегородки можна видалити.
Це буде зроблено за допомогою інструменту truncate. Не забудьте додати 1 до кількості секторів, оскільки номери блоків починаються з 0.

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


Редагувати:

Для тих, хто лінивий перейти на Linux:
також працює в Windows з Cygwin 's fdisk.exeі truncate.exe!

Що таке Cygwin?

Я можу сказати: "Cygwin: Отримайте таке відчуття Linux - у Windows" ( https://www.cygwin.com/ ).
Це набір виконуваних файлів, які можуть працювати під Windows, але надають усі програми командного рядка, які ви зазвичай знаєте з Linux. Якщо ви встановите кожен пакет під час встановлення, Cygwin може зайняти дуже багато часу, але для того, щоб наслідувати цей приклад, просто переконайтесь, що крім конфігурації за замовчуванням вибрані також пакети util-linux(fdisk) та coreutils(усікання).
Залежно від вашого оточення, вам потрібно додати /usr/binі /usr/sbinсвоє $PATH.


1
Який пакет мені потрібно встановити, щоб отримати fdisk.exeі truncate.exe?
PythonNut

1
Привіт @PythonNut, я оновив відповідь вище і додав необхідні пакети: o)
Nippey

Що робити, якщо розділ має розмір диска, навіть якщо використовується менше?
piegames

5

Я знаю, що це старе питання, але я хотів би показати, як це зробити на Mac, тому що це не так просто: fdiskне має -lможливості та truncateне встановлено за замовчуванням:

1. Крок 1: Встановіть скорочення на Mac OS X:

Для цього вам потрібні MacPorts або Homebrew. Я використовую MacPorts. Якщо у вас немає одного із них, продовжте їх та встановіть спочатку. Посилання на MacPorts

Тепер ми можемо встановити усікання . Відкрийте свій термінал і введіть:

sudo port install truncate

Для установки Brew:

brew install truncate

Це має робити.

2. Використовуйте дискові утиліти, щоб встановити наш IMG, щоб він був видимий команді термінала дискутилу .

Ви побачите через мить, для чого нам потрібен цей крок. Відкрийте додаток Disk Utility. Клацніть на Файл (на верхній панелі) -> Відкрити зображення диска та виберіть файл IMG.

3. Перевірте розмір розділу IMG та місце його встановлення.

На терміналі введіть:

diskutil list

І це повинно показати щось подібне, десь наприкінці:

/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

Отже, ми бачимо, що близько 12 ГБ є нерозподіленими. Нам потрібно їх усікати.

Причина, що нам потрібна ця команда, - перевірити, де розміщено зображення диска. У моєму випадку він знаходиться під: / dev / disk3

4. Дізнайтеся фактичний розмір розділу.

3,9 ГБ і 62,9 Мб - це значення, які не будуть працювати зі скороченням. Нам потрібно знайти розміри розділів у байтах.

5. Запустіть fdisk .

У своєму терміналі запустіть цю команду:

   fdisk /dev/diskX

Де X - це число, яке ви дізналися на попередньому кроці. Це має спричинити щось подібне:

         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. Час усікати !

На своєму терміналі, cdдо каталогу, у якому є ваше зображення. Тоді пиши:

truncate FILE SIZE

FILE - це ваш файл, звичайно.

SIZE - розмір у байтах. Що я зробив, - це додати до стовпця розміруfdisk команди, стовпець старту і помножити на 512. Отже, у моєму випадку SIZE буде: 512 * (7553024 + 131072) = 3934257152 , що становить приблизно 3,9 ГБ.

Вам буде потрібно початок і розмір цього останнього розділу , що проявляється fdisk. (Не обов’язково найбільший, але той, що знаходиться в кінці файлу IMG)

Я трохи експериментував, і кожного разу, коли я вводив 7553024 * 512 або (7553024 + 1) * 512 байт, файл IMG пошкоджувався. Тож, щоб бути впевненим, зробіть це так, як я вказав вище. Це може додати більше, ніж потрібно насправді, але це безпечний варіант.

7. (Додатково) Легко перевірити, чи IMG не пошкоджений.

Перейдіть ще раз у програму Disk Utility і спробуйте відкрити новий файл IMG, як і раніше. Якщо він змонтується, ви також можете побачити новий (менший) розмір. Якщо це не встановити, щось пішло не так. (Можливо, спробуйте збільшити розмір truncateкоманди)

Це не найкращий тест, але це вірний спосіб перевірити, чи новий IMG пошкоджений чи ні. Отже, не дуже розраховуйте на це, але варто спробувати ...

Сподіваюся, хтось вважає це корисним!


1
Хороший! Дякую за розширення знань :) Добре, що ви вказали, що 512*(Size+1)це не працює. Як ви бачите, я використовував Endі ні Size, оскільки ви повинні зберегти обидві секції, якщо таких є більше. Отже, використання 7553024 + 131072( +1) - це на 100% правильно!
Nippey

1

Останні Win32DiskImager насправді має можливість включати лише виділені розділи в образ диска. Це дозволить зробити обрізку одним клацанням миші.

введіть тут опис зображення


Відмінно, це значно спрощує роботу в Windows!
Ніппей

0

Щось я нещодавно помітив, як я роблю багато цих операцій Win32diskimg для резервного копіювання зображень RPI для розгортання. Нещодавно я починав тестувати SD "обрізку" fstrim для очищення частин SD-карти, які не використовуються для теоретичного вирівнювання зносу. Не впевнений у ефекті, який він матиме, але один з побічних ефектів був, коли я зображував розділ SD 16 ГБ, а потім використовував 7zip для його стиснення. Я перейшов від звичайних 16 ГБ до 9,5 ГБ, тепер файл 2,5 Гб. Зараз я тестую, щоб переконатися, що нічого поганого немає, але виявляється, що використання TRIM для позначення невикористаного простору як 0 робить стиснення зображення набагато ефективнішим (що має сенс). Просто хотілося повідомити про це було дуже легко виконати і без декількох кроків.


Хоча це не помиляється, це не дуже вирішує питання.
RalfFriedl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.