Bisakah saya menggunakan dd untuk mengkloning kartu SD yang lebih besar ke kartu SD yang lebih kecil jika partisi sebenarnya sesuai?

9

Saya memiliki kartu SD 16GB yang memiliki beberapa partisi (sebenarnya kartu untuk Raspberry Pi). Saya memiliki beberapa kartu 4GB lain yang ingin saya tiru dari kartu utama. 3 partisi pada kartu utama adalah:

  • Partisi boot yang serak, FAT, 60MB
  • Partisi Linux, ext2, 1GB
  • Tambahan partisi "penyimpanan", FAT, 1GB

Jika saya gunakan dduntuk membuat gambar kartu melalui:

dd if=/dev/sdb of=~/sd-card.bin

maka .bin yang dihasilkan berukuran 16GB. Apakah ada cara yang digunakan dduntuk menyalin hanya apa yang sebenarnya digunakan, yaitu <4GB sehingga saya dapat kemudian ddini ke kartu 4GB baru? Atau ada solusi yang lebih baik yang harus saya gunakan?

Charlie Schliesser
sumber
Saya akhirnya membuat konten yang tepat pada kartu 4GB baru dan mengkloningnya ddke sejumlah kartu lainnya. Tetap ingin tahu apakah mungkin untuk menyelesaikan masalah awal.

Jawaban:

9

Saya menganggap Anda menggunakan PC linux atau komputer mac untuk melakukan salinan, bukan pi raspberry itu sendiri. Anda mungkin perlu menambahkan ukuran blok.

Saya telah melihat satu dan empat MB yang digunakan untuk disk pi Raspberry dengan menentukan bs = 1M atau bs = 4M. Saya pikir ukuran blok lebih penting ketika menulis disk karena transfer besar lebih cepat daripada yang lebih kecil. Ini tidak mengatur ukuran blok untuk disk, itu hanya mempengaruhi ukuran transfer yang digunakan. Salah satu alasan untuk menetapkan ukuran blok besar adalah kebutuhan untuk menghapus flash sebelum menulisnya. Ini dilakukan secara otomatis tetapi lebih cepat untuk transfer yang lebih besar dari ukuran hapus minimal.

Anda dapat membatasi jumlah total data yang disalin oleh dd menggunakan "count". "count" dalam satuan blok. Jika akhir partisi terakhir pada disk sumber adalah sebelum ukuran tujuan Anda dapat melakukan apa yang Anda inginkan.

Sesuatu seperti dd if=/dev/sdb of=~/sd-card.bin bs=1M count=4000akan membuat gambar dengan ukuran 4000MB.

Lihat http://en.wikipedia.org/wiki/Dd_(Unix) dan http://elinux.org/RPi_Easy_SD_Card_Setup untuk informasi lebih lanjut. Tidak yakin bagaimana menemukan akhir dari partisi terakhir atau ukuran total kartu. Namun jika Anda telah memformat disk Anda mungkin akan tahu bagaimana melakukan ini.

William J Bagshaw
sumber
Terimakasih atas infonya. Saya tidak mengetahui opsi penghitungan. Saya akan mencobanya.
@ Charlie akan sangat menarik jika Anda dapat mencobanya dengan dan tanpa opsi hitungan dan melaporkan kembali. pastikan juga untuk memeriksa bagaimana ukuran disk sedang dilaporkan, dan jika Anda dapat menambahkan file ke dalamnya dan ukurannya berubah. Karena ketika gagal terkait dengan disk berukuran berbeda, Anda mendapatkan masalah semacam itu. Berikut adalah contoh di mana saya mengacaukan dd dengan dua drive berukuran berbeda. superuser.com/questions/538583/difficulty-resizing-a-partition Pada akhirnya saya tidak menggunakan dd untuk melakukan klon.
barlop
3

Memperluas jawaban William , orang dapat menghitung akhir partisi terakhir menggunakan fdiskdan kalkulator:

$ fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 7.4 GiB, 7948206080 bytes, 15523840 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
Disklabel type: dos
Disk identifier: 0x00057540

Device         Boot  Start     End Sectors  Size Id Type
/dev/mmcblk0p1        2048  186367  184320   90M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      186368 3667967 3481600  1.7G  5 Extended
/dev/mmcblk0p5      188416 3667967 3479552  1.7G 83 Linux

Total ruang yang digunakan dalam byte = sektor akhir dari ukuran sektor X partisi terakhir (di sini adalah 3667967 x 512).

Total ruang yang digunakan dalam GB = total ruang yang digunakan dalam byte / 1024 3 (di sini 1,749023 GB).

Biasanya, tidak penting untuk membuat gambar yang dikupas sampai ke bit data terakhir yang berguna sehingga dalam contoh di atas saya akan membuat gambar 2 GB menggunakan metode yang dijelaskan oleh William dalam jawaban sebelumnya yang sama :

dd if=/dev/mmcblk0 of=/path/to/pi_updated.img bs=1M count=2048

Termasuk di akhir gambar akan menjadi bagian kecil dari guff berguna setelah data berguna terakhir Anda tetapi pada prinsipnya tidak berbeda dengan guff berguna yang akan ditimpa ketika Anda menulis gambar kembali ke media Anda.

Metode ini telah bekerja untuk saya pada selusin klon. Jika ada kesalahan fatal dalam metode ini, mereka belum muncul ke permukaan.

Crumeniferus
sumber