Зображення SD не поміститься на SD-картці


13

У мене був якийсь час встановлений пі і добре працює (RPi - 1). Я хотів створити зображення RPi-1, щоб я міг завантажити точну копію на свій 2-й пі (RPi - 2). SD-карта в RPi-1 - 4 Гб (фактично використовується лише половина), а SD-карта в RPi-2 - теж 4 Гб. Я використовую диск Win32 Disk Imager, щоб створити копію RPi-1, успішно. Потім я відформатував SD-карту для RPi-2 за допомогою SD Formatter 4.0 (для Windows 7). Однак, коли я використовую дисковід Win32 для запису зображення RPi - 1 на SD-карту RPi - 2, я отримую: "Не вистачає місця на диску: Розмір 7744512 Доступний: 7626752 сектори Розмір сектора: 512"

Я знаю, що це не поганий образ, тому що я можу відформатувати SD-карту для RPi-1 і записати зображення на неї без проблем.

Що я тут пропускаю? Чи не всі SD-карти 4 ГБ однакового розміру чи вони незначно відрізняються? Чи потрібно щось зробити для нової SD-карти, яку я пропустив?

(RPi - 1 SD карта = Sandisk 4GB // RPi - 2 SD Card = Kingston 4GB)


2
немає НЕ двох карт SD з однаковим розміром, якщо тільки вони не надходять від одного виробника, тієї ж марки та з тієї ж виробничої партії. НЕ слід використовувати зображення SD-карти для резервного копіювання, а копіювати файли .
lenik

Скільки місця говорить ваш комп’ютер на порожній карті?
Бета-розпад

Відповіді:


6

Дійсно, не всі карти SD однакового розміру. Вам доведеться зменшити розділ, щоб він змістився на меншому SD. У мене була сама схожа проблема. Що я зробив, це був окремий SD з (у моєму випадку) Raspbian. І я підключив свій SD, що хотів змінити розмір, використовуючи зчитувач USB-карт.

Перш ніж ви зможете безпечно зменшити розділ, вам потрібно переконатися, що в кінці ви не видаляєте даних. Це можна зробити за допомогою resize2fs -M -p /dev/sda2(вам потрібно замінити / dev / sda2 правильним шляхом до зчитувача USB-карток та розділу Linux, який ви хочете змінити). Це дозволить змінити розмір файлової системи до найменшого можливого розміру. Ви можете фактично вказати потрібний розмір, але він включає деякі математичні та перетворювальні розміри в розміри та сектори, а що ні. Безпечніше і простіше цього не робити.

Після цього порцію можна стиснути. Я думаю, що я використовував fdiskдля цього. Отримайте точну початкову позицію розділу, видаліть його, відтворіть його, використовуючи ту саму початкову позицію, але з меншим розміром.

Нарешті, вам потрібно знову збільшити файлову систему, щоб зайняти весь розділ за допомогою resize2fs -p /dev/sda2


Я просто хочу трохи уточнити цю відповідь, оскільки мені стало важко слідувати. Я спершу відімкнув розділи на SD-картці. Тоді мені довелося бігти e2fsck -f /dev/mmcblk0p2(я скорочую другий розділ mmcblk0), щоб перевірити на узгодженість. Тоді мені дозволили бігати, resize2fs -M -p /dev/mmcblk0p2як було запропоновано.
audiFanatic


1

Вам краще зробити тарбол файлової системи, тому що, створюючи повне зображення диска, ви також копіюєте видалені дані. Коли ви видаляєте файл, вкладка від’єднується, але фактичні дані все ще є на диску. Повноцінне зображення диска ddскопіює ці старі дані (за винятком випадків, коли ви спочатку їх перезаписуєте /dev/zero, що займає певний час), але резервна копія за допомогою tarкопіює лише поточні дані.

Або ... ви можете зробити так, як це роблять багато дистрибутивів: зменшіть розмір вашої файлової системи до чогось безпечного, як 1,9 Гб, перш ніж створити зображення, і змініть розмір, щоб заповнити диск після відновлення резервної копії.

Caveat: Я не знайомий із засобами візуалізації Windows, я користувач Linux.


1

якщо ви використовуєте Linux, ось невеликий сценарій:

#!/bin/bash
# Automatic Image file resizer
# Written by SirLagz
strImgFile=$1

export PATH=$PATH:/sbin

if [[ ! $(whoami) =~ "root" ]]; then
echo ""
echo "**********************************"
echo "*** This should be run as root ***"
echo "**********************************"
echo ""
exit
fi

if [[ -z $1 ]]; then
echo "Usage: ./autosizer.sh <Image File>"
exit
fi

if [[ ! -e $1 || ! $(file $1) =~ "x86" ]]; then
echo "Error : Not an image file, or file doesn't exist"
exit
fi

partinfo=`parted -ms $1 unit B p | awk '{if (NR!=2) {print}}'`  
fileSystemType=`echo "$partinfo" | grep -o 'ext4\|ext3'`
numberOfMatchPart=`echo "$fileSystemType" | wc -l`

if [[ $fileSystemType == "" || $numberOfMatchPart -eq 0 || $numberOfMatchPart -gt 1 ]] ; then
echo "Error : Your partition layout is not currently supported by this tool."
exit
fi

partnumber=`echo "$partinfo" | grep $fileSystemType | awk -F: ' { print $1 } '`
partstart=`echo "$partinfo" | grep $fileSystemType | awk -F: ' { print substr($2,0,length($2)) } '`
loopback=`losetup -f --show -o $partstart $1`

e2fsck -f $loopback

minsize=`resize2fs -P $loopback | awk -F': ' ' { print $2 } '`
minsize=`echo $minsize+200000 | bc`

resize2fs -p $loopback $minsize
sleep 1
losetup -d $loopback

partnewsize=`echo "$minsize * 4096" | bc`
newpartend=`echo "$partstart + $partnewsize" | bc`

parted $1 rm $partnumber
parted $1 unit B mkpart primary $partstart $newpartend
endresult=`parted -m $1 unit B print free | tail -1 | awk -F: ' { print substr($2,0,length($2)) } '`
truncate -s $endresult $1

Кредит: Сірлаж (так вибачте!)


4
Ви б так люб'язно пояснили, що має робити цей сценарій? як я можу вказати потрібний розмір зображення за допомогою телепатії?
lenik

сценарій зменшує розмір img, приймає використаний розмір, додає 200000 до кінця (для журналу тощо), після завантаження цього img потрібно збільшити розмір нової карти SD ...
Gilles Grandguillaume

Привіт, я написав цей сценарій, тому сміливо знімайте будь-які питання у своєму блозі: sirlagz.net - Цей сценарій потрібно запускати в Linux. Сценарій зменшить розмір зображення до мінімально можливого розміру, а також небагато простою. Це дозволяє розмістити на 8 Гб зображення (з яких використовується лише 1 ГБ) на карту 1 Гб.
Лоуренс

він повинен використовувати "partstart = echo "$partinfo" | grep $fileSystemType | awk -F: ' { print substr($2,0,length($2) - 1) } '", щоб позбутися B у partstart.
netawater

@netawater У мене є інший результат для цієї команди з kubuntu / debian: sirlagz.net/2013/03/10/script-automatic-rpi-image-downsizer/… ... я використовую цей сценарій без "-1" з успіхом ! я не розумію
Жиль Гранджійом
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.