Obraz karty 16 Gb zawierającej niepodzielony na końcu obszar: Czy możliwe jest obcięcie?

18

Chciałem przygotować dystrybucję dla niektórych przyjaciół.
Ponieważ nie miałem nic innego do roboty, użyłem karty SD 16 Gb.

Zacząłem od domyślnego obrazu Debian Weezy 2Gb i nie zmieniłem rozmiaru.
Teraz, kiedy skończyłem, chciałem stworzyć obraz tego, co zrobiłem, ale dostaję plik 16 GB, zawierający 14 GB niepodzielonego na partycje (nie podzielonego na partycje i wolnego) miejsca na końcu.

[Użyłem Windows // Win32DiskImager, ponieważ nie mam teraz nic do przyklejenia się do interfejsu rPI]

Czy mogę po prostu obciąć plik obrazu tuż za partycjonowanym miejscem i przenieść wiodącą część na mniejszą kartę?

Nippey
źródło
2
Jeśli masz dostęp do komputera z systemem Linux, uruchom dd if=/dev/path/to/SD/card of=~/SpecialImage.img, a następnie zainstaluj GParted i uruchom gparted ~/SpecialImage.img. Gdy GParted otworzy .imgplik, po prostu zmień rozmiar partycji według własnych upodobań! (Obie komendy muszą być uruchomione jako root, sudo supowinny dać ci to, czego potrzebujesz. Po $przejściu na a #, jesteś rootem. Uważaj, to jest odpowiednik Boga w Linuksie.) GParted jest w zasadzie interfejsem GUI do zarządzania tajemnymi partytonami narzędzia, których będziesz potrzebować. Korzystanie z GParted sprawia, że ​​wszystko jest o wiele prostsze i bardziej prawdopodobne do osiągnięcia sukcesu.
JamesTheAwesomeDude
Plese uważnie przeczytał moje pytanie.
Nippey,
Tak, przeczytałem twoje pytanie i mogę powiedzieć, że obcięcie obrazu dysku jest niebezpieczne. Jasne, możesz po prostu odciąć ostatnie bajty obrazu, ale nie ma restauracji, która przypadkowo nie ścinałaby żadnych plików, zwłaszcza, że Linux celowo rozdziela swoje pliki . Ponadto na końcu systemu plików mogą znajdować się ważne metadane lub coś w tym rodzaju. Ogólnie rzecz biorąc, bezpieczniej jest używać odpowiedniego narzędzia do zmiany rozmiaru systemu plików niż próbować po prostu odciąć koniec pliku.
JamesTheAwesomeDude 27.04.13
1
Cóż, ale mówię o niepodzielonej przestrzeni. Nawet Linux nie umieszcza żadnych danych na Przestrzeni dyskowej, które są oznaczone jako niepartycjonowane, ale pozostają w bloku, jak zapisano w tabeli partycji. Mój problem był spowodowany formatem pliku obrazu: może się zdarzyć, że na końcu pliku obrazu znajdują się metadane, więc martwiłem się odcięciem informacji o pliku. (Mam nadzieję, że mój poprzedni komentarz nie zabrzmiał zbyt ostro, proszę;)
Nippey
Och, rozumiem co teraz mówisz. Jeśli martwisz się o uszkodzenie końcowego wolnego miejsca, uruchom GParted na obrazie po obcięciu go. Prawdopodobnie wyświetli ostatni obszar jako „nieprzydzielony” lub „uszkodzony” - utwórz nową „niesformatowaną” partycję w tym miejscu. Wtedy nie będziesz mieć żadnych problemów. :)
JamesTheAwesomeDude 27.04.13

Odpowiedzi:

33

W końcu znalazłem zasób, który wyjaśnia moje pytanie.

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

Krótki:

Tak, obcięcie jest możliwe!

Podsumowanie procesu:

Wyodrębnianie informacji o partycji z obrazu za pomocą 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

Widzimy, że partycja ma rozmiar około 2,8 Gb (5872026 * 512), reszta nie jest podzielona na partycje .

Tak więc wszystko po zakończeniu partycji można usunąć.
Zostanie to zrobione za pomocą narzędzia truncate. Nie zapomnij dodać 1 do liczby sektorów, ponieważ numery bloków zaczynają się od 0.

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


Edytować:

Dla tych, którzy są zbyt leniwi, aby przejść na Linuksa:
Działa również w systemie Windows z Cygwin 's fdisk.exei truncate.exe!

Co to jest Cygwin?

Mogę zacytować: „Cygwin: Poczuj się jak w Linuksie - w systemie Windows” ( https://www.cygwin.com/ ).
Jest to zestaw plików wykonywalnych, które mogą działać w systemie Windows, ale zapewniają wszystkie programy wiersza poleceń, które zwykle znasz z systemu Linux. Instalacja Cygwina może potrwać bardzo długo, jeśli wybierzesz każdy pakiet podczas instalacji, ale postępując zgodnie z tym przykładem, po prostu upewnij się, że oprócz domyślnej konfiguracji wybrane są również pakiety util-linux(fdisk) i coreutils(obcięte).
W zależności od środowiska musisz dodać /usr/bini /usr/sbindo swojego $PATH.

Nippey
źródło
1
Co pakiet muszę zainstalować, aby uzyskać fdisk.exei truncate.exe?
PythonNut
1
Cześć @PythonNut, zaktualizowałem swoją odpowiedź powyżej i dodałem wymagane pakiety: o)
Nippey
Co się stanie, jeśli partycja ma rozmiar dysku, nawet jeśli zostanie użyta mniejsza?
piegames
5

Wiem, że to stare pytanie, ale chciałbym pokazać, jak wykonać ten proces na komputerze Mac, ponieważ nie jest to tak łatwe: fdisknie ma -lopcji i truncatenie jest domyślnie instalowane:

1. Krok 1: Zainstaluj obcinanie w Mac OS X:

Do tego potrzebujesz MacPorts lub Homebrew. Używam MacPorts. Jeśli nie masz żadnego z nich, najpierw zainstaluj je. Link do MacPorts

Teraz możemy zainstalować obcinanie . Otwórz terminal i wpisz:

sudo port install truncate

W przypadku instalacji Brew:

brew install truncate

To powinno to zrobić.

2. Użyj narzędzi dyskowych, aby zamontować nasz IMG, tak aby był widoczny dla polecenia terminalut diskutil .

Za chwilę zobaczysz, dlaczego potrzebujemy tego kroku. Otwórz aplikację Disk Utility. Kliknij Plik (na górnym pasku) -> Otwórz obraz dysku i wybierz plik IMG.

3. Sprawdź rozmiar partycji IMG i miejsce jej zamontowania.

W terminalu wpisz:

diskutil list

I gdzieś na końcu powinno pokazać coś takiego:

/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

Widzimy więc, że około 12 GB jest niepodzielonych na partycje. Musimy je obciąć.

Powodem, dla którego potrzebujemy tego polecenia, jest sprawdzenie, gdzie jest zamontowany obraz dysku. W moim przypadku jest pod: / dev / disk3

4. Sprawdź rzeczywisty rozmiar partycji.

3,9 GB i 62,9 MB to wartości, które nie będą działać z obciętym narzędziem. Musimy znaleźć rozmiary partycji w bajtach.

5. Uruchom fdisk .

W swoim terminalu uruchom polecenie:

   fdisk /dev/diskX

Gdzie X to liczba, którą znalazłeś w poprzednim kroku. Powinno to spowodować coś takiego:

         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. Czas obciąć !

Na terminalu cddo katalogu, w którym znajduje się twój obraz. Następnie napisz:

truncate FILE SIZE

Plik jest oczywiście twoim plikiem.

ROZMIAR to rozmiar w bajtach. To, co zrobiłem, to dodanie do kolumny rozmiarufdisk polecenia kolumny początkowej i pomnożenie przez 512. Zatem w moim przypadku ROZMIAR będzie wynosić: 512 * (7553024 + 131072) = 3934257152 , co stanowi około 3,9 GB.

Będziesz potrzebował rozpoczęcia i rozmiaru z ostatniej partycji , która jest pokazana przez fdisk. (Niekoniecznie największy, ale ten na końcu pliku IMG)

Trochę eksperymentowałem i za każdym razem, gdy wpisałem 7553024 * 512 lub (7553024 + 1) * 512 bajtów, plik IMG był uszkodzony. Tak więc, dla pewności, rób to tak, jak wskazałem powyżej. Może dodać więcej niż jest to faktycznie potrzebne, ale jest to bezpieczna opcja.

7. (Opcjonalnie) Łatwo przetestuj, czy IMG nie jest uszkodzony.

Przejdź jeszcze raz w Narzędziu dyskowym i spróbuj otworzyć nowy plik IMG jak poprzednio. Jeśli się zamontuje, możesz także zobaczyć nowy (mniejszy) rozmiar. Jeśli się nie zamontuje, coś poszło nie tak. (Może spróbuj zwiększyć rozmiar w truncatepoleceniu)

To nie jest najlepszy test, ale jest to pewny sposób, aby sprawdzić, czy nowy IMG jest uszkodzony, czy nie. Więc tak naprawdę nie licz na to, ale warto spróbować ...

Mam nadzieję, że ktoś uzna to za pomocne!

ant0nisk
źródło
1
Niezłe! Dziękujemy za poszerzenie wiedzy :) Dobrze, że zaznaczyłeś, że 512*(Size+1)to nie działa. Jak widać, użyłem Endi nie Size, ponieważ musisz zachować obie partycje, jeśli jest ich więcej niż jedna. Tak więc użycie 7553024 + 131072( +1) jest w 100% prawidłowe!
Nippey,
1

Najnowsze Win32DiskImager ma opcję włączenia tylko przydzielonych partycji do obrazu dysku. Spowoduje to przycięcie jednym kliknięciem.

wprowadź opis zdjęcia tutaj

Dmitrij Grigoriew
źródło
Doskonałe, znacznie ułatwia w systemie Windows!
Nippey,
0

Właśnie zauważyłem, że wykonuję wiele operacji Win32diskimg w celu wykonania kopii zapasowej moich obrazów RPI do wdrożenia. Niedawno zacząłem testować „przycinanie” karty SD do czyszczenia części karty SD, które nie są używane do teoretycznego wyrównywania zużycia. Nie jestem pewien, jaki efekt będzie miał, ale jednym efektem ubocznym było zobrazowanie partycji SD 16 GB, a następnie użycie 7zip do jej skompresowania. Poszedłem ze zwykłego 16 GB do 9,5 GB do teraz pliku 2,5 GB. Testuję teraz, aby upewnić się, że wszystko jest w porządku, ale wydaje się, że użycie TRIM do oznaczenia nieużywanej przestrzeni jako 0 powoduje, że kompresja obrazu jest znacznie bardziej wydajna (co ma sens). Po prostu chciałem to zgłosić, było to bardzo łatwe do zrealizowania i nie wymagało wielu kroków.

jctghost
źródło
Chociaż nie jest źle, tak naprawdę nie odnosi się do pytania.
RalfFriedl