Автор Тема: Образы и карточки  (Прочитано 603 раз)

Оффлайн Olej

Образы и карточки
« : Июнь 01, 2018, 12:18:23 pm »
Образы - я имею в виду файлы .img
А карточки, соответственно - загрузочные SD карточки, создаваемые (записываемые) из этих файлов.

По этим делам есть несколько вопросов:

1. Откуда и какие, по популярности, берёте, народ, образы .img для OPI?
Вот этот, набор образов, ... самый развитый из всех, IMHO (только впечатление) - кто-то использует:


2. Перенос .img на SD-карту ... ну, здесь то как-раз вопросов нет...

3. Записанную SD-карту можно смонтировать в Linux:
[olej@dell ~]$ mount | grep /dev/mmcblk
/dev/mmcblk0p1 on /run/media/olej/boot type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)
/dev/mmcblk0p2 on /run/media/olej/202638e1-4ce4-45df-9a00-ad725c2537bb type ext4 (rw,nosuid,nodev,relatime,stripe=32753,data=ordered,uhelper=udisks2)
[olej@dell olej]$ sudo fdisk -l /dev/mmcblk0
[sudo] пароль для olej:
Диск /dev/mmcblk0: 3,7 GiB, 3951034368 байт, 7716864 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0xa2d55a34

Устр-во        Загрузочный начало   Конец Секторы Размер Идентификатор Тип
/dev/mmcblk0p1               8192  137215  129024    63M             c W95 FAT32 (LBA)
/dev/mmcblk0p2             137216 3618815 3481600   1,7G            83 Linux
Вот эти 2 смонтированных раздела (partition) носителя:
[olej@dell olej]$ ls -l
итого 20
drwxr-xr-x 22 root root  4096 июл 18  2017 202638e1-4ce4-45df-9a00-ad725c2537bb
drwxr-xr-x  4 olej olej 16384 янв  1  1970 boot
Здесь всё содержимое файлов разделов SD-карточки можно читать, но, самое главное, их можно писать, редактировать содержимое носителя, системы...
Вот здесь вопрос: как сделать обратную операцию, не с .img перенести на SD-карту, а содержимое SD-карты, или смонтированных в Linux разделов SD-карты - упаковать обратно в образ .img?

4. Что вообще за формат файлов образов .img?
Команда file в Linux их прекрасно распознаёт:
[olej@dell Orange_Pi_One]$ file Raspbian_For_OrangePi_PC_v0_8_0.img 
Raspbian_For_OrangePi_PC_v0_8_0.img: DOS/MBR boot sector; partition 1 : ID=0x83, start-CHS (0x2,170,41), end-CHS (0x8,54,60), startsector 40960, 83968 sectors; partition 2 : ID=0x83, start-CHS (0x8,54,61), end-CHS (0x1d8,5,58), startsector 124928, 7045120 sectors
Если формат распознаётся, то наверняка есть команды для его просмотра, редактирования и т.д. без физического переноса на SD-карту, монтирования в файловой системе и т.д. ... или команда монтирования файла образа в файловую систему Linux.
Какие команды?

Оффлайн Olej

Re: Образы и карточки
« Ответ #1 : Июнь 01, 2018, 12:29:32 pm »
2. Перенос .img на SD-карту ... ну, здесь то как-раз вопросов нет...
Вопросов нет, а вот некоторые замечания можно бы отметить...

Образы, те немногие, которые я рассматривал с десятка разных ресурсов, для Orange Pi & Rasbery Pi, представляются в 2-х архивных форматах: *.img.xz и .7z

В Linux они разархивируются командами, соответственно:

[olej@dell Orange_Pi_One]$ unxz -d Lubuntu_1404_For_OrangePiPC_v0_8_0_.img.xz 
...
[olej@dell Orange_Pi_One]$ ls -l Lubuntu_1404_For_OrangePiPC*
-rw-rw-r-- 1 olej olej 3670016000 июн  1 10:43 Lubuntu_1404_For_OrangePiPC_v0_8_0_.img
Как видите, исходный архив *.img.xz замещается (уничтожается) ... так что если вам не хочется его второй раз download - сохраняйте копию.

[olej@dell Orange_Pi_One]$ 7za e Armbian_5.38_Orangepione_Debian_stretch_next_4.14.14.7z 

7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=ru_RU.utf8,Utf16=on,HugeFiles=on,64 bits,8 CPUs Intel(R) Core(TM) i7 CPU       Q 720  @ 1.60GHz (106E5),ASM)

Scanning the drive for archives:
1 file, 256197056 bytes (245 MiB)

Extracting archive: Armbian_5.38_Orangepione_Debian_stretch_next_4.14.14.7z
--
Path = Armbian_5.38_Orangepione_Debian_stretch_next_4.14.14.7z
Type = 7z
Physical Size = 256197056
Headers Size = 289
Method = LZMA2:25
Solid = +
Blocks = 1

Everything is Ok                                               

Files: 5
Size:       1396723571
Compressed: 256197056
А для 7z архивов исходный архив сохранится.

P.S. Если у вас в установленном Linux нет этих утилит unxz & 7za, то вы в любом своём дистрибутиве Linux установите их средствами своей пакетной системы из стандартного репозитория дистрибутива.
« Последнее редактирование: Июнь 06, 2018, 01:46:00 pm от Olej »

Оффлайн ua3nbw

Re: Образы и карточки
« Ответ #2 : Июнь 01, 2018, 03:34:07 pm »
Если формат распознаётся, то наверняка есть команды для его просмотра, редактирования и т.д. без физического переноса на SD-карту, монтирования в файловой системе и т.д. ... или команда монтирования файла образа в файловую систему Linux.
Какие команды?
kpartx
https://nfolamp.wordpress.com/2010/08/16/mounting-raw-image-files-and-kpartx/

Оффлайн Olej

Re: Образы и карточки
« Ответ #3 : Июнь 01, 2018, 07:32:30 pm »
Если формат распознаётся, то наверняка есть команды для его просмотра, редактирования и т.д. без физического переноса на SD-карту, монтирования в файловой системе и т.д. ... или команда монтирования файла образа в файловую систему Linux.
Какие команды?
kpartx
https://nfolamp.wordpress.com/2010/08/16/mounting-raw-image-files-and-kpartx/
OK, спасибо.
Смотрю ... в разных дистрибутивах:
olej@nvidia ~ $ lsb_release -a
No LSB modules are available.
Distributor ID: LinuxMint
Description: Linux Mint 18.3 Sylvia
Release: 18.3
Codename: sylvia

olej@nvidia ~ $ apt search kpartx
i   kpartx                                   - присвоение имён разделам диска                   
p   kpartx:i386                              - присвоение имён разделам диска                   
i   kpartx-boot                              - Provides kpartx during boot                       
[olej@xenix ~]$ lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: Fedora
Description: Fedora release 27 (Twenty Seven)
Release: 27
Codename: TwentySeven

[olej@xenix ~]$ yum list kpartx
Последняя проверка окончания срока действия метаданных: 1:19:15 назад, Пт 01 июн 2018 18:04:24.
Установленные пакеты
kpartx.x86_64                  0.7.1-9.git847cc43.fc27                  @updates
Да, оно есть в стандартных репозиториях всех разных дистрибутивов Linux.
Дальше посмотрю что оно позволяет с образами делать.

Оффлайн Olej

Re: Образы и карточки
« Ответ #4 : Июнь 01, 2018, 07:48:29 pm »
Дальше посмотрю что оно позволяет с образами делать.
[olej@dell Orange_Pi_One]$ kpartx -l Raspbian_For_OrangePi_PC_v0_8_0.img 
/dev/mapper/control: open failed: Permission denied
Failure to communicate with kernel device-mapper driver.
Incompatible libdevmapper 1.02.136 (2016-11-05) and kernel driver (unknown version).
mount: could not find any device /dev/loop#Bad address
can't set up loop
Только с root! даже на посмотреть...
[root@dell Orange_Pi_One]# kpartx -l Raspbian_For_OrangePi_PC_v0_8_0.img
loop0p1 : 0 83968 /dev/loop0 40960
loop0p2 : 0 7045120 /dev/loop0 124928
loop deleted : /dev/loop0

[root@dell Orange_Pi_One]# kpartx -a -v Raspbian_For_OrangePi_PC_v0_8_0.img
add map loop0p1 (253:1): 0 83968 linear /dev/loop0 40960
add map loop0p2 (253:2): 0 7045120 linear /dev/loop0 124928

[root@dell Orange_Pi_One]# ls -l /dev/mapper
итого 0
crw------- 1 root root 10, 236 май 25 15:27 control
lrwxrwxrwx 1 root root       7 май 25 15:27 cryptswap1 -> ../dm-0
lrwxrwxrwx 1 root root       7 июн  1 19:39 loop0p1 -> ../dm-1
lrwxrwxrwx 1 root root       7 июн  1 19:39 loop0p2 -> ../dm-2

[root@dell Orange_Pi_One]# mkdir /mnt/boot

[root@dell Orange_Pi_One]# mkdir /mnt/root

[root@dell Orange_Pi_One]# mount /dev/mapper/loop0p1 /mnt/boot

[root@dell Orange_Pi_One]# mount /dev/mapper/loop0p2 /mnt/root
[olej@dell Orange_Pi_One]$ mount | grep /dev/mapper
/dev/mapper/loop0p1 on /mnt/boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro)
/dev/mapper/loop0p2 on /mnt/root type ext4 (rw,relatime,data=ordered)

[olej@dell Orange_Pi_One]$ ls /mnt/boot
script.bin  uImage

[olej@dell Orange_Pi_One]$ ls /mnt/root
bin  boot  dev  etc  home  lib  lost+found  media  mnt  opt  proc  root  run  sbin  selinux  srv  sys  tmp  usr  var

Оффлайн Olej

Re: Образы и карточки
« Ответ #5 : Июнь 01, 2018, 08:45:16 pm »
Дальше посмотрю что оно позволяет с образами делать.
Самый главный вопрос: позволяет ли оно вносить произвольные изменения в монтированные разделы, так чтобы они сохранились в образе, а дальше в загрузочной SD-карте?
Для этого вношу изменения - добавляю новые файлы:
[root@dell orangepi]# pwd
/mnt/root/home/orangepi

[root@dell orangepi]# touch test.file.txt

[root@dell orangepi]# echo 12345 > test.file.txt

[root@dell orangepi]# cat test.file.txt
12345

[root@dell boot]# pwd
/mnt/boot

[root@dell boot]# echo 654321 > new.file

[root@dell boot]# ls
new.file  script.bin  uImage
Размонтирую всё что связано с образом ... дотла:
[root@dell /]# umount /mnt/boot

[root@dell /]# umount /mnt/root

[root@dell /]# ls /mnt/root /mnt/boot
/mnt/boot:
/mnt/root:

[root@dell Orange_Pi_One]# kpartx -d -v Raspbian_For_OrangePi_PC_v0_8_0.img
del devmap : loop0p2
del devmap : loop0p1
loop deleted : /dev/loop0

[root@dell Orange_Pi_One]# ls -l /dev/mapper
итого 0
crw------- 1 root root 10, 236 май 25 15:27 control
lrwxrwxrwx 1 root root       7 май 25 15:27 cryptswap1 -> ../dm-0
Монтирую образ по-новой с нуля:
[root@dell Orange_Pi_One]# kpartx -a -v Raspbian_For_OrangePi_PC_v0_8_0.img
add map loop0p1 (253:1): 0 83968 linear /dev/loop0 40960
add map loop0p2 (253:2): 0 7045120 linear /dev/loop0 124928

[root@dell Orange_Pi_One]# mount /dev/mapper/loop0p1 /mnt/boot

[root@dell Orange_Pi_One]# mount /dev/mapper/loop0p2 /mnt/root
И смотрю те файлы, которые раньше дописал в образ:
[root@dell Orange_Pi_One]# cat /mnt/boot/new.file 
654321

[root@dell Orange_Pi_One]# cat /mnt/root/home/orangepi/test.file.txt
12345
Годится!

Оффлайн Olej

Re: Образы и карточки
« Ответ #6 : Июнь 01, 2018, 11:56:53 pm »
2. Перенос .img на SD-карту ... ну, здесь то как-раз вопросов нет...
...
Например так:
# dd bs=1M if=raspbian_jessie8_xenomai3.0.5.img of=/dev/mmcblk0 status=progress conv=fsync
Здесь всё содержимое файлов разделов SD-карточки можно читать, но, самое главное, их можно писать, редактировать содержимое носителя, системы...
Вот здесь вопрос: как сделать обратную операцию, не с .img перенести на SD-карту, а содержимое SD-карты, или смонтированных в Linux разделов SD-карты - упаковать обратно в образ .img?
Командой (выше) переносим файл .img на SD карту /dev/mmcblk0, которая потом отображается как 2 дисковых раздела:
[olej@dell olej]$ sudo fdisk -l /dev/mmcblk0
[sudo] пароль для olej:
Диск /dev/mmcblk0: 3,7 GiB, 3951034368 байт, 7716864 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0xa2d55a34

Устр-во        Загрузочный начало   Конец Секторы Размер Идентификатор Тип
/dev/mmcblk0p1               8192  137215  129024    63M             c W95 FAT32 (LBA)
/dev/mmcblk0p2             137216 3618815 3481600   1,7G            83 Linux

Но если так, то после любых корректировок в файловой системе смонтированной в Linux (но не загруженной, не системной) SD-карточки, обратно "затолкать" разделы в файл .img можно, нужно думать, обратной командой:
# dd bs=1M of=new_image_file.img if=/dev/mmcblk0 status=progress conv=fsync
Файл new_image_file.img, по идее, будет выровнен (дополнен) до размера кратного 1Mb ... но на его качество и загружаемость это не должно влиять.

Оффлайн Olej

Re: Образы и карточки
« Ответ #7 : Июнь 02, 2018, 01:02:46 am »
2. Перенос .img на SD-карту ... ну, здесь то как-раз вопросов нет...
...
Например так:
# dd bs=1M if=raspbian_jessie8_xenomai3.0.5.img of=/dev/mmcblk0 status=progress conv=fsync
Это в теории ... в Linux классика переноса байтовых последовательностей (файлов, дисков, разделов, ...) - это dd.
Но не так давно (в 2016г. кажется) появился такой tools специально для записи SD-карт, для любых операционных систем:


Там же (по ссылке выше) скачиваете, запускаете, и записываете из .img ... очень комфортно:

pcmax

  • Гость
Re: Образы и карточки
« Ответ #8 : Июнь 04, 2018, 01:34:43 am »
ну как у Вас успехи?

Оффлайн Olej

Re: Образы и карточки
« Ответ #9 : Июнь 04, 2018, 06:41:13 pm »
ну как у Вас успехи?
Успехи в чём?
Эта тема называется "Образы и карточки" - с образами и карточками успехи замечательные, всё становится понятным.

Оффлайн Olej

Re: Образы и карточки
« Ответ #10 : Июнь 17, 2018, 11:09:47 am »
с образами и карточками успехи замечательные, всё становится понятным.
В принципе, файл образа .img - это ничто иное, как просто тупо побайтовая копия пространства диска (SD-карточки). Это хорошо видно по простейшей команде, которой можно накатывать образы на SD
$ dd if=xxx.img of=/dev/mmcblk0 bs=1M

Потом мы можем расширить скопированный корневой раздел (/dev/mmcblk0p1 или в других сборках это может быть /dev/mmcblk0p2 и т.п.) до фактического размера используемой SD-карточки. Как это исчерпывающе было обсуждено в соседней теме:    
как увеличить размер директории root?.

Возник обратный интерес:
- взяли, поработали с системой с SD-карточки, обстоятельно :D ... что-то там установили, что-то там написали, скомпилировали, отладили, что-то настроили... (т.е. это никак не исходная система, которую устанавливали из xxx.img, а "наполненная")
- хотелось бы из вот этой модифицированной системы на SD-карточке сделать файл образа (yyy.img), для тиражирования на другие свои микрокомпьютеры.

Видится такая возможность:
- чтобы тупо не копировать в yyy.img весь размер используемой SD (16Gb, 32Gb ...) ужать размер root раздела до фактически используемого размера (ну, + ещё 5-10%)
- фактический размер оцениваем командой df ... скажем 1.8Gb ...
- ужимаем в загруженной и работающей системе командой parted ... или если у вас в системе есть GUI, DE - то вариант gparted
- parted/gparted знают все (или почти все?) файловые системы, используемые Linux (да у вас там наверняка почти ext4), так что умело уплотнит содержимое раздела в его начало
- дальше вопрос в том, чтобы командой dd скопировать в файл yyy.img не весь наличный объём SD-карты (там может быть много и бессмысленно), а только до того места, где заканчивается раздел root

Вот как-то так...
   
P.S. Или есть более простой и более ... стандартный способ, и это я здесь перемудрил? ???
« Последнее редактирование: Июнь 17, 2018, 11:18:32 am от Olej »

Оффлайн igzero

Re: Образы и карточки
« Ответ #11 : Июль 09, 2018, 06:50:24 pm »
Как делаю я (работать с копией образа):
1. Создаю loop устройство образа с созданием устройств разделов
Цитировать
losetup -P /dev/loop0 FileName.img
2. Проверяю какие разделы есть
Цитировать
fdisk -l /dev/loop0
3. Монтирую /dev/loop0p1
Цитировать
mount /dev/loop0p1 /mnt/img
4. Удаляю/добавляю что надо
5. Дефрагментация
Цитировать
e4defrag /dev/loop0p1
6. Размонтирую
Цитировать
umount /mnt/img
7. Удаляю fdisk-ом /dev/loop0p2 (как правило там всякая не нужная инфа
8. Оцениваю до скольки ужать
Цитировать
resize2fs -P /dev/loop0p1
resize2fs выводит возможный минимальный размер в блоках размером 512 байт.
Пусть будет  NNNNN блоков. Если необходимо, я резервирую 32М байт под второй раздел (65536 блоков по 512 байт)
MMMMM=MBRBOOT+NNNNN+65536
Номер первого сектора обычно 2048 (предварительно посмотрите fdisk-ом)
Номер последнего сектора NLAST=2048+NNNNN-1
9. Ужимаю размер /dev/loop0p1 до минимального
Цитировать
parted /dev/loop0 resizepart 1 $NLAST
resize2fs /dev/loop0p1
e2fsck -y -f /dev/loop0p1
parted /dev/loop0 unit s mkpart primary ext4/ext2/vfat $NLAST+1 $MMMMM-1
mkfs -t ext4/ext2/vfat /dev/loop0p2
e2fsck -y -f /dev/loop0p2
10. Отсоединяю устройство loop0
Цитировать
losetup -d /dev/loop0
11. Создаю образ нужного размера
Цитировать
dd if=FileName.img of=NewImage.img bs=512 count=MMMMM

Вместо parted можно воспользоваться fdisk-ом
Если второй раздел не планируете, то и не создавайте.
Не забывать про /etc/fstab

« Последнее редактирование: Июль 09, 2018, 07:42:18 pm от igzero »

Оффлайн Olej

Re: Образы и карточки
« Ответ #12 : Июль 09, 2018, 07:06:16 pm »
Как делаю я (работать с копией образа):
Это, как я понимаю, описывается последовательность действий при создании из физической SD-карточки эталонного файла образа .img для тиражирования системы?
Только завершающее копирование - что-то типа?:
# dd if=/dev/mmcblk0 of=NewImage.img ...
Не забывать про /etc/fstab
Что вы здесь имели в виду? Что хотели сказать?
UUID поменять?
P.S. Как мне представляется ... может для таких задач вообще имеет смысл отказаться от UUID и перейти к указанию /dev/mmcblk0p1 (?)
« Последнее редактирование: Июль 09, 2018, 07:09:09 pm от Olej »

Оффлайн igzero

Re: Образы и карточки
« Ответ #13 : Июль 09, 2018, 07:13:16 pm »
Как делаю я (работать с копией образа):
Это, как я понимаю, описывается последовательность действий при создании из физической SD-карточки эталонного файла образа .img для тиражирования системы?
Только завершающее копирование - что-то типа?:
# dd if=/dev/mmcblk0 of=NewImage.img ...
Не забывать про /etc/fstab
Что вы здесь имели в виду? Что хотели сказать?
UUID поменять?
P.S. Как мне представляется ... может для таких задач вообще имеет смысл отказаться от UUID и перейти к указанию /dev/mmcblk0p1 (?)
Нет. Зачем? Все как я написал. В UNIX-е все даже устройства являются файлами, а вы написали mmcblk0 - это неверно, так как мы работает 1) с файлом образа NameFile.img и 2) псевдоустройством loop0
А от UUID-а рекомендую отказаться, указав в fstab явно устройство /dev/mmcblk0p1 /dev/mmcblk0p2 и т.д.

Оффлайн igzero

Re: Образы и карточки
« Ответ #14 : Июль 09, 2018, 07:17:43 pm »
если например вы все делаете на машине x86 то устройства mmcblk0 там может и не быть, а если оно есть, то это абсолютно другое устройство,. Еще раз повторюсь: работаем с файлом образа FileName.img через псевдоустройство loop0

P.S.: Не пробовал, но можно попробовать после создания NewImage

Цитировать
losetup -P /dev/loop0 NewImage
blkid /dev/loop0p1
blkid /dev/loop0p2
и прописать их в /etc/fstab

Цитировать
mount /dev/loop0p1 /mnt/img
nano /mnt/img/etc/fstab

UUID root-партиции mmcblk0p1 вроде не должен измениться, а вот mmcblk0p2 точно изменится после mkfs

« Последнее редактирование: Июль 09, 2018, 07:45:29 pm от igzero »