Gambar kartu 16Gb berisi ruang yang tidak dipartisi di akhir: Memotong mungkin?

18

Saya ingin menyiapkan distro untuk beberapa teman.
Karena saya tidak memiliki apa pun yang tergeletak di sekitar, saya menggunakan kartu SD 16Gb.

Saya mulai dengan gambar default Debian Weezy 2Gb dan tidak mengubah ukuran.
Sekarang, ketika saya selesai, saya ingin membuat gambar dari apa yang saya lakukan, tetapi saya mendapatkan file 16Gb, berisi 14Gb ruang yang tidak dipartisi (tidak dipartisi dan kosong ) pada akhirnya.

[Saya menggunakan Windows // Win32DiskImager karena saya tidak punya apa-apa untuk menempel ke rPI sekarang]

Bisakah saya memotong file gambar tepat di belakang ruang yang dipartisi dan mentransfer bagian terkemuka ke kartu yang lebih kecil?

Nippey
sumber
2
Jika Anda memiliki akses ke komputer linux, jalankan dd if=/dev/path/to/SD/card of=~/SpecialImage.img, lalu instal GParted dan jalankan gparted ~/SpecialImage.img. Setelah GParted membuka .imgfile Anda , cukup ubah ukuran partisi sesuai keinginan Anda! (Kedua perintah harus dijalankan sebagai root, sudo suharus memberi Anda apa yang Anda butuhkan. Ketika $beralih ke #, Anda Root. Hati-hati, ini adalah setara dengan Linux.) alat yang Anda butuhkan. Menggunakan GParted hanya membuat semuanya jadi lebih sederhana dan lebih mudah untuk berhasil.
JamesTheAwesomeDude
Tolong baca pertanyaan saya dengan cermat.
Nippey
Ya, saya membaca pertanyaan Anda, dan saya dapat memberitahu Anda bahwa hanya memotong gambar disk berbahaya. Tentu, Anda hanya dapat memotong byte terakhir dari suatu gambar, tetapi tidak ada jaminan bahwa Anda tidak akan secara sengaja memotong file apa pun, terutama karena Linux secara sengaja memisahkan file -file tersebut . Plus, mungkin ada beberapa metadata penting di akhir filesystem atau sesuatu seperti itu. Secara keseluruhan, ini adalah taruhan yang lebih aman untuk menggunakan utilitas pengubahan ukuran sistem file yang tepat daripada mencoba sendiri memotong ujung file sendiri.
JamesTheAwesomeDude
1
Yah, tapi saya berbicara tentang ruang tidak berpartisi. Bahkan Linux tidak akan memasukkan data apa pun pada Disk Space yang ditandai tidak dipartisi tetapi tetap berada di dalam blok seperti yang tertulis di Tabel Partisi. Kekhawatiran saya disebabkan oleh format file gambar: Mungkin, file gambar memiliki metadata yang terletak di akhir file, jadi saya khawatir memotong informasi file. (Semoga komentar saya sebelumnya tidak terdengar terlalu keras, sry;)
Nippey
Ohh, aku mengerti apa yang kamu katakan sekarang. Jika Anda khawatir tentang ruang kosong trailing rusak, kemudian jalankan GParted pada gambar setelah Anda memotongnya. Mungkin akan mencantumkan area terakhir sebagai "tidak terisi" atau "rusak" - buat partisi "tidak diformat" baru di ruang itu. Maka, Anda tidak akan memiliki masalah. :)
JamesTheAwesomeDude

Jawaban:

33

Saya akhirnya menemukan sumber yang menjelaskan pertanyaan saya.

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

Pendek:

Ya, memotong mungkin!

Ringkasan proses:

Mengekstrak informasi partisi dari gambar menggunakan 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

Kita lihat, bahwa partisi memiliki ukuran sekitar 2,8Gb (5872026 * 512), sisanya tidak dipartisi .

Jadi, semuanya setelah akhir partisi dapat dihapus.
Ini akan dilakukan dengan alat truncate. Jangan lupa menambahkan 1 ke jumlah sektor, karena angka blok dimulai dari 0.

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


Edit:

Bagi mereka terlalu malas untuk beralih ke Linux:
Juga bekerja pada Windows dengan Cygwin 's fdisk.exedan truncate.exe!

Apa itu Cygwin?

Saya dapat mengutip: "Cygwin: Dapatkan perasaan Linux - pada Windows" ( https://www.cygwin.com/ ).
Ini adalah sekumpulan executable yang dapat berjalan di bawah Windows, tetapi menyediakan semua program baris perintah yang biasanya Anda ketahui dari Linux. Cygwin dapat membutuhkan waktu sangat lama untuk menginstal jika Anda memilih setiap paket selama instalasi, tetapi untuk mengikuti contoh ini, cukup pastikan, bahwa selain konfigurasi default, juga paket util-linux(fdisk) dan coreutils(truncate) dipilih.
Tergantung pada lingkungan Anda, Anda perlu menambahkan /usr/bindan/usr/sbin ke Anda $PATH.

Nippey
sumber
1
Paket apa yang harus saya instal untuk mendapatkan fdisk.exedan truncate.exe?
PythonNut
1
Hai @PythonNut, saya memperbarui jawaban saya di atas dan menambahkan paket yang diperlukan: o)
Nippey
Bagaimana jika partisi memiliki ukuran disk, meskipun kurang digunakan?
piegames
5

Saya tahu ini adalah pertanyaan lama, tetapi saya ingin menunjukkan bagaimana melakukan proses ini di Mac, karena itu tidak semudah: fdisk tidak memiliki -lopsi, dan truncatetidak diinstal secara default:

1. Langkah 1: Instal truncate di Mac OS X:

Anda perlu MacPorts atau Homebrew untuk ini. Saya menggunakan MacPorts. Jika Anda tidak memilikinya, silakan instal dulu.Tautan ke MacPorts

Sekarang, kita dapat menginstal truncate . Buka Terminal Anda dan ketik:

sudo port install truncate

Untuk instalasi Brew:

brew install truncate

Ini harus dilakukan.

2. Gunakan Disk Utilities untuk memasang IMG kami sehingga dapat dilihat oleh perintah terminal diskutil .

Anda akan segera melihat mengapa kami membutuhkan langkah ini. Buka aplikasi Disk Utility. Klik pada File (di bar bagian atas) -> Buka Disk Image dan pilih file IMG Anda.

3. Periksa ukuran partisi IMG dan di mana ia dipasang.

Di Terminal, ketik:

diskutil list

Dan itu akan menunjukkan sesuatu seperti ini, di suatu tempat pada akhirnya:

/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

Jadi, kita melihat bahwa sekitar 12GB tidak dipartisi. Kita harus memotongnya.

Alasan kami membutuhkan perintah ini adalah untuk memeriksa di mana disk image dipasang. Dalam kasus saya, ini berada di bawah: / dev / disk3

4. Cari tahu ukuran partisi sebenarnya.

3,9 GB dan 62,9 MB adalah nilai yang tidak akan berfungsi dengan truncate. Kita perlu menemukan ukuran partisi dalam byte.

5. Jalankan fdisk .

Di Terminal Anda, jalankan perintah ini:

   fdisk /dev/diskX

Di mana X adalah angka yang Anda temukan pada langkah sebelumnya. Ini akan menghasilkan sesuatu seperti ini:

         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. Waktu untuk memotong !

Di terminal Anda, cdke direktori gambar Anda. Lalu menulis:

truncate FILE SIZE

FILE tentu saja file Anda.

UKURAN adalah ukuran dalam byte. Apa yang saya lakukan, adalah menambahkan ke kolom ukuranfdisk perintah, kolom awal dan kalikan dengan 512. Jadi, dalam kasus saya UKURAN akan menjadi: 512 * (7553024 + 131072) = 3934257152 , yaitu sekitar 3,9 GB.

Anda akan membutuhkan awal dan ukuran dari partisi terakhir yang ditunjukkan oleh fdisk. (Belum tentu yang terbesar, tetapi yang ada di akhir file IMG)

Saya bereksperimen sedikit, dan setiap kali saya memasukkan 7553024 * 512 atau (7553024 +1) * 512 byte, file IMG rusak. Jadi, untuk memastikan, lakukan seperti yang saya sebutkan di atas. Mungkin menambah lebih dari yang sebenarnya dibutuhkan, tetapi ini adalah opsi yang aman.

7. (Opsional) Mudah menguji apakah IMG tidak rusak.

Buka sekali lagi di Disk Utility, dan cobalah untuk membuka file IMG baru seperti sebelumnya. Jika dipasang, Anda juga dapat melihat ukuran baru (lebih kecil) . Jika tidak dipasang, ada yang salah. (Mungkin mencoba menambah ukuran pada truncateperintah)

Ini bukan tes terbaik, tetapi ini adalah cara yang pasti untuk memeriksa apakah IMG baru rusak atau tidak. Jadi, jangan benar-benar mengandalkannya, tetapi patut dicoba ...

Saya harap seseorang menemukan ini bermanfaat!

ant0nisk
sumber
1
Yang bagus! Terima kasih telah memperluas pengetahuan :) Bagus yang Anda tunjukkan 512*(Size+1)tidak bekerja. Seperti yang Anda lihat, saya menggunakan Enddan tidak Size, karena Anda harus menjaga kedua partisi jika ada lebih dari satu. Jadi, menggunakan 7553024 + 131072( +1) 100% benar!
Nippey
1

Win32DiskImager baru-baru ini sebenarnya memiliki opsi untuk hanya menyertakan partisi yang dialokasikan dalam disk image. Ini akan melakukan pemotongan dalam satu klik.

masukkan deskripsi gambar di sini

Dmitry Grigoryev
sumber
Luar biasa, membuatnya jauh lebih mudah di Windows!
Nippey
0

Hanya sesuatu yang baru-baru ini saya perhatikan ketika saya melakukan banyak operasi Win32diskimg ini untuk membuat cadangan gambar RPI saya untuk ditempatkan. Saya baru-baru ini mulai menguji SD "trimming" fstrim untuk membersihkan bagian dari kartu SD yang tidak digunakan untuk leveling keausan teoritis. Tidak yakin tentang efek yang akan dimilikinya tetapi satu efek samping adalah ketika saya mencitrakan partisi SD 16GB dan kemudian menggunakan 7zip untuk mengompresnya. Saya beralih dari 16GB menjadi 9.5GB menjadi file 2.5GB. Saya menguji sekarang untuk memastikan tidak ada yang salah tetapi tampaknya menggunakan TRIM untuk menandai ruang yang tidak digunakan sebagai 0 membuat kompresi gambar jauh lebih efisien (yang memang masuk akal). Hanya ingin melaporkan hal ini sangat mudah dilakukan dan tidak ada beberapa langkah.

jctghost
sumber
Meskipun tidak salah, itu tidak benar-benar menjawab pertanyaan.
RalfFriedl