Создание образа диска SD с нуля: & ldquo; необходимо указать тип файловой системы & rdquo;

Действительно короткая версия:

Я пытаюсь создать образ диска, который включает MBR / загрузчик, предоставленный в другом образе, и один раздел с корневая файловая система предоставляется в виде tarball. Создание файла образа, разбиение его на части, связывание его с зацикливанием с использованием kpartx и применение файловой системы, похоже, работают, но когда я пытаюсь смонтировать /dev/mapper/loopXp1, mount говорит you must specify a filesystem type. Это, конечно, не поможет.

Подробности:

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

Таким образом, кажется разумным просто попросить людей загрузить dd только из загрузчика плюс tar-архив корня fs, а затем запустить скрипт, который создает образ желаемого размера для локального распространения.

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

Вот именно то, что я делаю:

#!/bin/bash
# Adapted from instructions at http://linux-sunxi.org/Bootable_SD_card

# Settings
img_fn=test.img
img_size=2 #Gigs
img_mountpoint="fs"
img_bootsect="bootsect.img"
img_rootfs="rootfs.tar.bz2"

# Start a disk image file
dd if=/dev/zero of=$img_fn bs=1024 count=10 || exit

# Apply the bootloader
dd if=$img_bootsect of=$img_fn bs=1024 seek=8 || exit

# Extend the image to the desired size
truncate -s ${img_size}G $img_fn || exit

# Create one partition that fills the "disk"
# Using '0 -0' or '0 -1' here warns produces a warning that  the
# partition "is not properly aligned for best performance."
parted -s $img_fn 'mklabel msdos mkpart primary 1 -1 print' || exit

# Associate the file with a loopback device
sudo kpartx -a $img_fn || exit

# Get the name of the loopback device
rootfs_dev=/dev/mapper/$(sudo kpartx -l $img_fn | awk '{print $1}')

# Create mountpoint and filesystem, mount the new FS
[ -e $img_mountpoint ] || mkdir -p $img_mountpoint  || exit
sudo mkfs.ext4 $rootfs_dev  || exit

###
### THINGS BREAK HERE 
### mkfs appears to succeed, but mount fails with:
### "mount: you must specify the filesystem type"
###
sudo mount $rootfs_dev $img_mountpoint  || exit

sudo tar -C $img_mountpoint -jxf $img_rootfs  || exit

sudo umount $img_mountpoint
sudo kpartx -d $img_fn
rmdir $img_mountpoint

Вот полный вывод bash -x, если кто-то захочет. Обратите внимание, что выходные данные parted и mkfs предполагают, что «диск» успешно разбит на разделы и отформатирован.

Если кто-нибудь может увидеть, что здесь происходит, я был бы очень рад услышать об этом. Спасибо!

$ bash -x mkimg.sh
+ img_fn=test.img
+ img_size=2  
+ img_mountpoint=fs
+ img_bootsect=bootsect.img
+ img_rootfs=rootfs.tar.bz2
+ dd if=/dev/zero of=test.img bs=1024 count=10
10+0 records in
10+0 records out
10240 bytes (10 kB) copied, 0.000968263 s, 10.6 MB/s
+ dd if=bootsect.img of=test.img bs=1024 seek=8
254+1 records in
254+1 records out
260260 bytes (260 kB) copied, 0.067996 s, 3.8 MB/s
+ truncate -s 2G test.img
+ parted -s test.img 'mklabel msdos mkpart primary 1 -1 print'
Model:  (file)
Disk /usr/local/tunapanda/provision/x2go_mystery/test.img: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  2147MB  2146MB  primary

+ sudo kpartx -a test.img
++ sudo kpartx -l test.img
++ awk '{print $1}'
+ rootfs_dev=/dev/mapper/loop3p1
+ '[' -e fs ']'
+ sudo mkfs.ext4 /dev/mapper/loop3p1
mke2fs 1.42 (29-Nov-2011)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524287 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

+ sudo mount /dev/mapper/loop3p1 fs
mount: you must specify the filesystem type
+ exit
2
задан 22 April 2015 в 23:32

1 ответ

Обновление : Я не предоставлял полное правильное решение прежде; что на самом деле работало на меня требуемый использовать gparted также, который Вы не можете использовать.

Этот метод должен работать (я протестировал его); Вы можете ajdust каждый шаг к Вашим потребностям и автоматизировать все в сценарий:

  1. Создают пустое необработанное изображение: dd if=/dev/zero of=/image.img bs=1 count=100000000 (100MB)
  2. Создают таблицу разделов и раздел: sudo parted -s image.img 'mklabel msdos mkpart primary 2048s 100%'
  3. Создают файловую систему: sudo mkfs.ext4 image.img

ключ здесь ( я думаю ) это - второй шаг: по некоторым причинам во время теста я не смог создать изображение рабочего диска из образа диска с плохим выровненным разделом когда-либо . Выравнивание раздела добилось цели для меня.

0
ответ дан 23 April 2015 в 09:32

Другие вопросы по тегам:

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