Скопируйте существующую установку Raspbian на меньшую SD-карту

Возможно ли скопировать существующую и настроенную установку Raspbian на меньшую SD-карту?

Когда я впервые установил Raspbian, у меня была только карта размером 32 ГБ, которая, очевидно, больше, чем нужно.

22 голоса | спросил mwld 14 MarpmThu, 14 Mar 2013 21:42:23 +04002013-03-14T21:42:23+04:0009 2013, 21:42:23

8 ответов


9

В этом ответе я продемонстрирую, что делать шаг за шагом, чтобы люди могли понять логику решения и уметь применять шаги в своих других проблемах.

Но, во-первых, следует сказать, что это общая (а не raspi-специфическая) проблема для переноса файловых систем с SD-карты на меньшую (но достаточно большую для данных) SD-карту.

Требования

На нем работает ноутбук с микро SD-кард-ридером и Linux (я предпочитаю Ubuntu).

Сокращения

PIBOX      : Raspberry Pi which is used
SD_CARD_A  : 8GB micro SD card which is used on PIBOX and on which Raspbian-lite (the OS) is installed
SD_CARD_B  : 2GB micro SD card which will be used on PIBOX and on which Raspbian-lite (the OS) will be installed

Разделы SD_CARD_A

Пока PIBOX запущен, мы перечислим разделы (ненужные системные разделы здесь не отображаются).

[email protected]:~# df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/root      ext4      7.3G  1.1G  5.9G  16% /
/dev/mmcblk0p1 vfat       63M   21M   43M  33% /boot

В SD_CARD_A есть 2 раздела: / и /boot. Даже 2 ГБ не используются в общей сложности.

Резервное копирование SD_CARD_A

После завершения работы и остановки PIBOX мы берем SD_CARD_A из платы PIBOX и помещаем его в устройство чтения карт нашего ноутбука.

Разделы SD_CARD_A автоматически монтируются в нашу систему как /dev/sdc1 и /dev/sdc2.

[email protected]:~# df -Th
Filesystem                    Type      Size  Used Avail Use% Mounted on
/dev/sdb2                     ext4       22G   13G  7.9G  63% /
/dev/sdb1                     vfat      197M  2.6M  195M   2% /boot/efi
/dev/sda8                     ext4       66G   11G   52G  17% /home
/dev/sdc1                     vfat       63M   21M   43M  33% /media/some_user_name/boot
/dev/sdc2                     ext4      7.3G  1.1G  5.9G  16% /media/some_user_name/some_uuid_serial

Мы размонтируем эти разделы из нашей системы, чтобы успешно работать с ними.

[email protected]:~# umount /dev/sdc1
[email protected]:~# umount /dev/sdc2

Подробно выводим информацию об устройстве SD_CARD_A для подтверждения в следующих шагах.

[email protected]:~# fdisk -l /dev/sdc
Disk /dev/sdc: 7969 MB, 7969177600 bytes
246 heads, 62 sectors/track, 1020 cylinders, total 15564800 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: 0x2019f6d8

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            8192      137215       64512    c  W95 FAT32 (LBA)
/dev/sdc2          137216    15564799     7713792   83  Linux

Выше видно, что SD_CARD_A имеет емкость 8 ГБ.

Мы клонируем SD_CARD_A в файл pibox.img.

[email protected]:~# dd bs=4MB if=/dev/sdc of=pibox.img
1992+1 records in
1992+1 records out
7969177600 bytes (8.0 GB) copied, 416.582 s, 19.1 MB/s

Проверьте размер скопированных байтов, он равен значению, полученному командой fdisk -l /dev/sdc.

Линейный модуль Linux

Linux имеет модуль, называемый loopback, который позволяет нам обрабатывать файл как блок-устройство.

Загружаем модуль обратной петли.

[email protected]:~# modprobe loop

Мы находим неиспользуемый путь устройства loopback.

[email protected]:~# losetup -f /dev/loop0

Теперь мы создаем loopback-устройство для файла pibox.img.

[email protected]:~# losetup /dev/loop0 pibox.img

Мы запускаем ядро ​​о смене разделов.

[email protected]:~# partprobe /dev/loop0

Мы подтверждаем успешность предыдущих операций.

[email protected]:~# losetup /dev/loop0
/dev/loop0: [0806]:69 (/root/pibox.img)

Мыподробно отобразить информацию об устройстве обратной связи, чтобы сравнить ее с SD_CARD_A.

[email protected]:~# fdisk -l /dev/loop0
Disk /dev/loop0: 7969 MB, 7969177600 bytes
255 heads, 63 sectors/track, 968 cylinders, total 15564800 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: 0x2019f6d8

      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1            8192      137215       64512    c  W95 FAT32 (LBA)
/dev/loop0p2          137216    15564799     7713792   83  Linux

Выше видно, что размер устройства loopback (= 7969177600 байт) и разделы одинаковы с SD_CARD_A.

Основные математические данные

Отныне мы будем сосредоточены на разделе /dev/loop0p2. Назовем его THE_PARTITION .

Размер блока составляет 512 байтов (как указано на строке, начинающейся с Units = sector .....)

THE_PARTITION начинается с блока 137216 и заканчивается на этапе 15564799, что означает, что он имеет размер 15427584 blocks (= 15564799 â '137216 + 1).

Таким образом, размер THE_PARTITION в байтах составляет 7898923008 bytes (= 512 * 15427584).

Чтобы установить THE_PARTITION в SD_CARD_B, мы хотим, чтобы он имел новый размер 3710940 blocks или другими словами 1900001280 bytes (= 512 * 3710940).

Итак, новый номер конечного блока 3848155, вычисленный по start block number (= 137216) + size in blocks (= 3710940) - 1.

Файловая система и раздел

Есть 2 операции, которые нельзя ошибочно принимать за друг друга.

  • Изменение размера файловой системы. Мы сократим файловую систему на THE_PARTITION, установив его размер в 3710940 blocks.
  • Изменение размера раздела. Мы уменьшим THE_PARTITION, установив его номер конечного блока на 3848155.

Сжимающая файловая система

Перед сжатием файловой системы он должен быть отмечен как чистый с помощью e2fsck.

[email protected]:~# e2fsck -f /dev/loop0p2
e2fsck 1.42.9 (4-Feb-2014)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/loop0p2: 41175/475776 files (0.2% non-contiguous), 309183/1928448 blocks

Мы сокращаем файловую систему с помощью resize2fs.

[email protected]:~# resize2fs /dev/loop0p2 3710940s
resize2fs 1.42.9 (4-Feb-2014)
Resizing the filesystem on /dev/loop0p2 to 463867 (4k) blocks.
The filesystem on /dev/loop0p2 is now 463867 blocks long.

Сокращение раздела

Мы узнаем, что номер THE_PARTITION с parted.

[email protected]:~# parted /dev/loop0
GNU Parted 2.3
Using /dev/loop0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print                                                            
Model: Loopback device (loop)
Disk /dev/loop0: 7969MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      4194kB  70.3MB  66.1MB  primary  fat16        lba
 2      70.3MB  7969MB  7899MB  primary  ext4

(parted) quit

Мы сокращаем THE_PARTITION с помощью parted.

[email protected]:~# parted /dev/loop0 unit s resizepart 2 3848155
Warning: Shrinking a partition can cause data loss, are you sure you want to continue?
Yes/No? Yes  

Мы закончили с устройством loopback. Мы отделяем его.

[email protected]:~# losetup -d /dev/loop0

Усекающий файл изображения

Мы проверяем новую таблицу разделов.

[email protected]:~# fdisk -l pibox.img 

Disk pibox.img: 7969 MB, 7969177600 bytes
255 heads, 63 sectors/track, 968 cylinders, total 15564800 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: 0x2019f6d8

    Device Boot      Start         End      Blocks   Id  System
pibox.img1            8192      137215       64512    c  W95 FAT32 (LBA)
pibox.img2          137216     3848155     1855470   83  Linux

На выходе ясно видно, что номер конечного блока THE_PARTITION уменьшается from 15564799 to 3848155.

Последний блок, который мы используем, это 3848155. Нумерация блоков начинается с 0. Итак, у нас есть 3848155 + 1 блоков и новый размер файла pibox.img должен быть 1970255872 bytes (= (3848155 + 1) ) * 512).

Мы обрезаем файл pibox.img.

[email protected]:~# truncate --size=1970255872 pibox.img

Мы проверяем новый размер файла pibox.img.

[email protected]:~# ls -l pibox.img 
-rw-r--r-- 1 root root 1970255872 Oct 13 21:53 pibox.img

Создание SD_CARD_B

Мы помещаем SD_CARD_B в устройство чтения карт нашего ноутбука. Разделы SD_CARD_B автоматически монтируются в нашу систему как /dev/sdc1 и /dev/sdc2.

[email protected]:~# df -Th
Filesystem                    Type      Size  Used Avail Use% Mounted on
/dev/sdb2                     ext4       22G   13G  7.9G  63% /
/dev/sdb1                     vfat      197M  2.6M  195M   2% /boot/efi
/dev/sda8                     ext4       66G   11G   52G  17% /home
/dev/sdc1                     vfat       63M   21M   43M  33% /media/some_user_name/boot
/dev/sdc2                     ext4      1.8G  1.6G   59M  97% /media/some_user_name/some_uuid_serial

Выше видно, что SD_CARD_B имеет емкость 2 ГБ.

Мы размонтируем эти разделы из нашей системы, чтобы успешно работать с SD_CARD_B.

[email protected]:~# umount /dev/sdc1
[email protected]:~# umount /dev/sdc2

Мы клонируем файл pibox.img в SD_CARD_B.

[email protected]:~# dd bs=4MB if=pibox.img of=/dev/sdc
492+1 records in
492+1 records out
1970255872 bytes (2.0 GB) copied, 646.967 s, 3.0 MB/s

Проверьте размер скопированных байтов, он равен значению, полученному командой ls -l pibox.img.

Загрузка PIBOX

После того, как мы выберем SD_CARD_B с нашего ноутбука и поместим его на плату PIBOX, мы загрузим систему и войдем в консоль PIBOX.

Перечислим разделы (некоторые другие ненужные системные разделы здесь не отображаются).

[email protected]:~# df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/root      ext4      1.8G  1.1G  601M  64% /
/dev/mmcblk0p1 vfat       63M   21M   43M  33% /boot
ответил vaha 14 +03002016-10-14T01:26:54+03:00312016bEurope/MoscowFri, 14 Oct 2016 01:26:54 +0300 2016, 01:26:54
5

Когда вы использовали dd if=/dev/sdx of=/path/to/image bs=1M, /dev/sdx относится ко всему «диску», , поэтому изображение всегда будет размером всей карты.

Вместо этого вам нужно будет использовать dd if=/dev/sdxn ..., где n - номер раздела.

Вам, вероятно, потребуется сделать это дважды - один раз для раздела /boot и один раз для раздела /.

Затем вам нужно будет создать разделы на новой карте, которые по крайней мере такие же большие, как эти две оригинальные, чтобы вернуть содержимое обратно.

ответил John La Rooy 26 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 26 Sep 2013 14:34:21 +0400 2013, 14:34:21
3

Используйте что-то вроде parted (редактор разделов), чтобы уменьшить основной раздел до меньшего размера, а затем использовать инструмент, такой как Clonezilla, для копирования из теперь меньшего раздела на новую карту. Скорее всего, вам придется сделать это на другом компьютере.

ответил Jerry Gagnon 14 MarpmThu, 14 Mar 2013 22:12:25 +04002013-03-14T22:12:25+04:0010 2013, 22:12:25
3
  1. Создайте образ карты, используя один из уже упомянутых методов - Как мне создать резервную копию моей малины?

  2. Используйте сценарий в http: //sirlagz.net/2013/03/10/script-automatic-rpi-image-downsizer/ для уменьшения размера изображения

  3. Восстановить уменьшенное изображение на новой более мелкой карте

ответил Mihir 17 Jam1000000amSat, 17 Jan 2015 01:43:12 +030015 2015, 01:43:12
1

Я использовал rsync для скопирования файловых систем с одного диска на другой на некоторое время, без икоты. Преимущество использования rsync состоит в том, что он копирует содержимое файловой системы, а не выполняет блок-версию устройства; в результате, на самом деле все равно, какой размер предназначены для целевых и исходных дисков, если на целевом диске достаточно места для хранения данных.

Итак, вот как я это сделаю:

  1. Создайте новую установку raspbian на вашей новой, более мелкой SD-карте.
  2. Загрузитесь в новую установку и разверните файловую систему, чтобы заполнить весь диск. Выключите пи.
  3. Теперь смонтируйте новые и старые карты и используйте rsync -avx oldFilesystem newFilesystem, чтобы скопировать /перезаписать файловую систему на новой карте с файловой системой со старой карты.
  4. Наконец, загрузитесь в новую систему и запустите rpi-update, чтобы убедиться, что ваше прошивка является совместимым и актуальным.

После этого ваша новая карта должна иметь совершенно функциональную систему Raspbian, установленную на ней.

ответил sdenton4 11 Jpm1000000pmSat, 11 Jan 2014 23:30:22 +040014 2014, 23:30:22
1

Я создал сценарий оболочки для резервного копирования и восстановления всех данных на SD-карте. Сначала он удаляет некоторые данные (соответствующие моему проекту) и уменьшает размер раздела до минимального размера, поэтому изображение имеет размер, отличный от данных на SD-карте. В качестве дополнения сценарий создает * .zip-файл изображения. После восстановления созданного изображения на другой SD-карте раздел будет увеличен до максимального размера. Скрипт использует команды, упомянутые в других ответах. Поскольку это мой скрипт с кулачным файлом с таким размером, мне потребовалось несколько часов, чтобы создать его, и это не идеальный самолет. Особенно я не знаю, как обрабатывать возвращаемые значения resize2fs и fdisk, чтобы пользователь вводил нужные мне значения. Есть ли идеи, чтобы это исправить? Надеюсь, этот скрипт поможет кому-то другому. Не стесняйтесь редактировать и улучшать его.

"Usage:
    <skriptname> -b <path>                  create backup of SC Card (dev/mmcblk0) to file <path>/JJJJ-MM-DD_HHMM.img
    <skriptname> -r <path>/FILENAME.img     restore an exitsting image (<path>/FILENAME.img) to the SD Card (dev/mmcblk0) 
    <skriptname> -r <path>/FILENAME.zip     unzip and restore an exitsting image (<path>/FILENAME.zip) to the SD Card (dev/mmcblk0)
    <skriptname> -h                         show this hlep

вот он:

#!/bin/bash 

# check if the user is root
if (( $EUID != 0 )); then
  echo "This script requires root privileges please run as root"
  exit
fi


while getopts ":b:r:h" opt; do
  case $opt in
    b)
      mode="backup"
      OUTPATH=$OPTARG
      ;;
    r)
      mode="restore"
      DIRFILENAME=$OPTARG
      ;;
    h)
      mode="help"
      ;;
    \?)
      echo "Invalid option: -$OPTARG. Use -h for help" >&2
      exit 1
      ;;
    :)
      echo "Option -$OPTARG requires an argument. Use -h for help" >&2
      exit 1
      ;;
  esac
done
# no option
if [ $OPTIND == 1 ]
then
  echo "$(basename "$0") needs an option! Use -h for help"
  exit 1
fi


myMount(){
  # create mountpoint if not existing
  if [ ! -d /tmp/sd2/ ] ; then
    mkdir /tmp/sd2
  fi

  # mount partition
  mount -v -t ext4 /dev/mmcblk0p2 /tmp/sd2
  err=$?
  if [ $err != 0 ]; then
    echo "mount failed error: $err"
    exit 1
  fi
}

myUmount(){
  cd /home/ # otherwise umount will fail
  # fuser -vm /tmp/sd2/

  # umount partition
  umount -v /tmp/sd2
  err=$?
  if [ $err != 0 ]; then
    echo "umount failed error: $err"
    exit 1
  fi
}

myEnlarge(){
  echo "enlarge partition..."
  # enlarge partition is not posible with fdisk -> delete and recreate it
  (
  echo d # delete partition
  echo 2 # patition number
  echo n # add a new partition
  echo p # primary partition
  echo 2 # partition number
  echo   # first sector (accept default: varies)
  echo   # last sector (accept default: varies)
  echo w # write changes
  ) | fdisk /dev/mmcblk0

  echo "\n check filesystem... "
  e2fsck -f -v -C 0 /dev/mmcblk0p2

  # enlarge filesystem to maxsize
  resize2fs -p /dev/mmcblk0p2
}

case "$mode" in
"help")
  echo "Usage:
    $(basename "$0") -b <path>                  create backup of SC Card (dev/mmcblk0) to file <path>/JJJJ-MM-DD_HHMM.img
    $(basename "$0") -r <path>/FILENAME.img     restore an exitsting image (<path>/FILENAME.img) to the SD Card (dev/mmcblk0) 
    $(basename "$0") -r <path>/FILENAME.zip     unzip and restore an exitsting image (<path>/FILENAME.zip) to the SD Card (dev/mmcblk0)
    $(basename "$0") -h                         show this hlep
--------------------------------
Adrian Zeitler, Germany 2017"
  ;;
"backup")  ####################################### backup ####################################### 
  echo "an image of the SD Card (/dev/mmcblk0) whitch is as smal as possible will be created to $OUTPATH."
  # ------------------  delete some data --------------------

  echo "Do you want to delete tempfiles? [y/n]" 
  read delfiles

  if [ "$delfiles" = "y" ]
    then
      echo "Delete tempfiles..."

      myMount

      # remove some data
      cd /tmp/sd2/home/alarm/
      rm -v -f hagelbeere.db
      rm -v -f HAILcam.log
      rm -v -f HAILcam.log.1
      rm -v -f test.jpg

      myUmount

    elif [ "$delfiles" = "n" ]
      then
    echo "I don't delete anything."
    else
    echo "Sorry, I didn't understand."
    exit 1
  fi


  # --------------------------------------------------------------
  # shrink partition 2 to minimum size

  echo "check file system... "
  e2fsck -f -v -C 0 /dev/mmcblk0p2
  err=$?
  if [ $err != 0 ]; then
    echo "file system check failed, error: $err"
    exit 1
  fi

  echo "shrink filesystem of partition 2 to minimum size..."
  resize2fs -p -M /dev/mmcblk0p2
  err=$?
  if [ $err != 0 ]; then
    echo "resize2fs failed, error: $err"
    exit 1
  fi
  # --> Das Dateisystem auf /dev/mmcblk0p2 ist nun 692365 Blöcke groß.

  echo "Please tell me the new filesystem size displayed above:"
  read size
  # from resize2fs blocksize, fdisk wants sector: sector = block * 8
  size=$(( $size*8 ))

  # shrink partition is not posible with fdisk -> delete and recreate it
  (
  echo d # delete partition
  echo 2 # patition number
  echo n # add a new partition
  echo p # primary partition
  echo 2 # partition number
  echo   # first sector (accept default: varies)
  echo +$size  # last sector
  echo w # write changes
  ) | fdisk /dev/mmcblk0
  err=$?
  if [ $err != 0 ]; then
    echo "fdisk failed, error: $err"
    exit 1
  fi


  # --------------------------------------------------------------

  # fill unused space with zeros
  echo "Do you want to fill unused space with zeros? [y/n]" 
  read fillzeros


  if [ "$fillzeros" = "y" ]
    then
      echo "Copy zeros. This will end up with an error. But this is ok."

      myMount    

      dd if=/dev/zero | pv | dd of=/tmp/sd2/nullen.datei conv=noerror,notrunc,sync bs=10240
      # exits with error -> this is normal

      # dlelete zeros
      rm -v -f /tmp/sd2/nullen.datei
      sync

      myUmount

    elif [ "$fillzeros" = "n" ]
      then
    echo "I don't delete anything."
    else
    echo "Sorry, I didn't understand."
    exit 1
  fi

  # --------------------------------------------------------------

  # find out end of partition
  fdisk -l /dev/mmcblk0
  echo "Please tell me the end of mmcblk0p2 displayed above."
  read count



  DATE=$(date +"%Y-%m-%d_%H%M")
  IMGFILENAME=$DATE.img 
  echo "Do you want to create image with filename $OUTPATH$IMGFILENAME? [y/n]"
  read answer
  if [ "$answer" = "y" ]
  then
    echo "Do you want to create a *.zip file of the created image? [y/n]"
    read zip
    echo "Do you want to enlarge partition 2 to maxsize after image creation? [y/n]"
    read enlarge

    echo "create image..."
    cd $OUTPATH
    # create image with dd, stop at and of partition
    # count=N   copy only N input blocks
    # bs=BYTES  read and write up to BYTES bytes at a time = block size
    # pv    show status
    dd if=/dev/mmcblk0 | pv -s $(( $count*512 )) | dd of=$IMGFILENAME bs=512 count=$count
    err=$?
    if [ $err != 0 ]; then
      echo "dd failed error: $err"
      exit 1
    fi

    # --------------------------------------------------------------
    # create zip file
    # or like this:
    # sudo dd if=/dev/sdX | pv |gzip > /pfad/zur/datei.img.gz
    if [ "$zip" = "y" ]
    then
      echo "create zip file..."
      zip $DATE.zip $IMGFILENAME
    fi
    # --------------------------------------------------------------
  fi

  # --------------------------------------------------------------
  # enlarge partition 2

  if [ "$enlarge" = "y" ]
  then
    myEnlarge
  fi

  ;; #end case mode backup
"restore")  ####################################### restore ####################################### 
  #chek if image exists
  if [[ -s "$DIRFILENAME" ]]
  then
    # check if file is an image or zip file
    if [[ $DIRFILENAME =~ \.img$ ]]
    then
      IMGFILENAME=$(basename "$DIRFILENAME")
    elif [[ $DIRFILENAME =~ \.zip$ ]]
    then
      ZIPFILENAME=$(basename "$DIRFILENAME")
    else
      echo "Not the right file format. I accept *.img and *.zip"
      exit 1
    fi
  else
    echo "Image file does not exist."
    exit 1
  fi
  echo "the file $DIRFILENAME will be restored to the SD Card /dev/mmcblk0"

  #change to the path of the imagefile
  SOURCEPATH=$(dirname "$DIRFILENAME")
  cd $SOURCEPATH


  if [ "$ZIPFILENAME" != "" ]
  then
    echo "unzip file"
    # change file extention form zip zu img
    l=$(( ${#ZIPFILENAME}-3 ))
    IMGFILENAME="${ZIPFILENAME:0:l}img"
    unzip $ZIPFILENAME
  fi

  echo "Do you realy want to restore $SOURCEPATH/$IMGFILENAME to the SD card /dev/mmcblk0? 
  Warning: all data on the device /dev/mmcblk0 will be lost! [y/n]"
  read answer
  if [ "$answer" = "y" ]
  then
    echo "Do you want to enlarge partition 2 to maxsize after restoring? [y/n]"
    read enlarge
    echo "restore image..."
    filesize=$(wc -c <"$IMGFILENAME")
    echo "Filesize = $filesize Byte"
    dd if=$IMGFILENAME | pv -s $filesize | dd of=/dev/mmcblk0 bs=512
    err=$?
    if [ $err != 0 ]; then
      echo "dd failed error: $err"
      exit 1
    fi
  fi

  # --------------------------------------------------------------
  # enlarge partition 2
  if [ "$enlarge" = "y" ]
  then
    myEnlarge
  fi

  ;; #end case mode restore
esac
ответил Adrian 14 22017vEurope/Moscow11bEurope/MoscowTue, 14 Nov 2017 13:54:37 +0300 2017, 13:54:37
0

Самое легкое решение, которое я нашел, - сделать резервную копию оригинальной более крупной карты, используя команды dd, описанные выше, а затем восстановить изображение на карту меньшего размера, используя что-то вроде piwriter. dd может работать также ... не уверен. PiWriter возвратил ошибку, так как она закончилась, но поскольку изображение не содержало каких-либо фактических данных, превышающих размер меньшей карты, это просто обрезало пустые сектора. Я не уверен, что последствия этого ... раздел может потребоваться проверка или ремонт, но я могу проверить, что это сработало, когда я положил его в Pi.

ответил Pooch 10 Jam1000000amFri, 10 Jan 2014 04:10:37 +040014 2014, 04:10:37
0

Я использую старую версию win32diskimager-RELEASE-0.1-r15-win32 для чтения изображения, он создает изображение 4 ГБ даже с 8 ГБ SD-карты, а затем записывает изображение с последним версия win32diskimager.

Я использую более старую версию, потому что старая будет пропускать каждую ошибку.

ответил Double-G 27 MaramSun, 27 Mar 2016 10:55:09 +03002016-03-27T10:55:09+03:0010 2016, 10:55:09

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132