dateisystem-images
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| dateisystem-images [2018-09-21 17:39:34] – [HDD-Image bootfähig machen] sysop | dateisystem-images [2024-02-26 18:36:27] (aktuell) – [Image auf einen USB-Stick schreiben] manfred | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== Dateisystem-Images ====== | ||
| + | |||
| + | |||
| + | ===== Image auf einen USB-Stick schreiben ===== | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | > wget https:// | ||
| + | > dd if=FreeBSD-14.0-RELEASE-amd64-memstick.img of=/dev/sdf bs=1M conv=sync | ||
| + | |||
| + | |||
| + | ===== HDD-Image ===== | ||
| + | |||
| + | __siehe auch:__ | ||
| + | * [[:: | ||
| + | * [[::mount ISO]] | ||
| + | * [[:: | ||
| + | |||
| + | ein Image erstellen, welches zu Beginn nur '' | ||
| + | > dd if=/ | ||
| + | |||
| + | so kann man ein LVM-Volumen von einem Image mounten: | ||
| + | * [[http:// | ||
| + | |||
| + | |||
| + | ==== FreeBSD-root-Image (mit UFS) einer VM vergrößern ==== | ||
| + | |||
| + | [[:: | ||
| + | |||
| + | |||
| + | ==== FreeBSD-root-Image (mit ZFS) einer VM vergrößern ==== | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | |||
| + | ein Image mit einer Größe von 20GB anlegen: | ||
| + | > truncate -s 20G blk.img | ||
| + | |||
| + | ein bereits vorhandes Image um 10GB vergrößern: | ||
| + | > truncate -s +10G blk.img | ||
| + | |||
| + | ein bereits vorhandes Image auf 40GB vergrößern: | ||
| + | > truncate -s 40G blk.img | ||
| + | |||
| + | ZFS-Partitionen samt Größe anzeigen: | ||
| + | > zpool status | ||
| + | pool: zroot | ||
| + | ... | ||
| + | vtbd0p3 | ||
| + | ... | ||
| + | | ||
| + | > gpart list /dev/vtbd0 | ||
| + | ... | ||
| + | Consumers: | ||
| + | 1. Name: vtbd0 | ||
| + | | ||
| + | ... | ||
| + | | ||
| + | > gpart show | ||
| + | => 40 41942960 | ||
| + | 40 1024 1 freebsd-boot | ||
| + | 1064 | ||
| + | 2048 | ||
| + | | ||
| + | 41940992 | ||
| + | |||
| + | " | ||
| + | > gpart recover vtbd0 | ||
| + | > gpart show | ||
| + | => 40 41942960 | ||
| + | ... | ||
| + | |||
| + | //Wenn die Beschädigung zu schwerwiegend ist und '' | ||
| + | |||
| + | " | ||
| + | > gpart resize -i 3 vtbd0 | ||
| + | > gpart show | ||
| + | > zpool online -e zroot / | ||
| + | > df -h | ||
| + | |||
| + | |||
| + | ==== FreeBSD ==== | ||
| + | |||
| + | |||
| + | === Einhängen eines existierenden Abbildes unter FreeBSD === | ||
| + | |||
| + | # mdconfig -a -t vnode -f diskimage -u 0 | ||
| + | # mount /dev/md0 /mnt | ||
| + | |||
| + | |||
| + | === Erstellen eines dateibasierten Laufwerks mit mdconfig === | ||
| + | |||
| + | # dd if=/ | ||
| + | 5120+0 records in | ||
| + | 5120+0 records out | ||
| + | | ||
| + | # mdconfig -a -t vnode -f newimage | ||
| + | | ||
| + | # mdconfig -l | ||
| + | md0 | ||
| + | | ||
| + | # bsdlabel -w md0 auto | ||
| + | file -s /dev/md0a | ||
| + | | ||
| + | # newfs md0a | ||
| + | /dev/md0a: 5.0MB (10224 sectors) block size 16384, fragment size 2048 | ||
| + | using 4 cylinder groups of 1.25MB, 80 blks, 192 inodes. | ||
| + | super-block backups (for fsck -b #) at: | ||
| + | 160, 2720, 5280, 7840 | ||
| + | | ||
| + | # mount /dev/md0a /mnt | ||
| + | | ||
| + | # df /mnt | ||
| + | Filesystem 1K-blocks Used Avail Capacity | ||
| + | / | ||
| + | |||
| + | |||
| + | === Mit mdmfs ein dateibasiertes Dateisystem erstellen === | ||
| + | |||
| + | # dd if=/ | ||
| + | 5120+0 records in | ||
| + | 5120+0 records out | ||
| + | # mdmfs -F newimage -s 5m md0 /mnt | ||
| + | # df /mnt | ||
| + | Filesystem 1K-blocks Used Avail Capacity | ||
| + | / | ||
| + | |||
| + | |||
| + | ==== Linux ==== | ||
| + | |||
| + | * [[http:// | ||
| + | |||
| + | |||
| + | === ohne OffSet === | ||
| + | |||
| + | einfach als LOOP mounten: | ||
| + | > mount -t ext4 -o ro,loop / | ||
| + | |||
| + | |||
| + | === mit OffSet === | ||
| + | |||
| + | erstmal den OffSet ermitteln | ||
| + | > parted / | ||
| + | |||
| + | hier die Darstellungseinheit festlegen | ||
| + | (parted) unit | ||
| + | Unit? [compact]? B | ||
| + | |||
| + | Partitionen anzeigen: | ||
| + | (parted) print | ||
| + | ... | ||
| + | Number | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | In der Spalte " | ||
| + | |||
| + | mount mit OffSet: | ||
| + | > mount -o loop, | ||
| + | |||
| + | sollte der OffSet zu groß sein (manche Tools können das nicht), | ||
| + | dann kann man auch mit " | ||
| + | > dd if=/ | ||
| + | > mount -t ext4 -o ro,loop / | ||
| + | |||
| + | ---- | ||
| + | **Variante 1 mit //'' | ||
| + | > fdisk -lu disk01.hdd | ||
| + | Units = sectors of 1 * 512 = 512 bytes | ||
| + | Device | ||
| + | disk01.hdd1 | ||
| + | |||
| + | > mount -o loop, | ||
| + | |||
| + | ---- | ||
| + | **Variante 2 mit //'' | ||
| + | * [[http:// | ||
| + | |||
| + | //kpartx// installieren: | ||
| + | > aptitude install kpartx | ||
| + | > man kpartx | ||
| + | |||
| + | Partition(en) anlegen: | ||
| + | > fdisk disk01.hdd | ||
| + | > fdisk -lu disk01.hdd | ||
| + | |||
| + | hier wird jede Partition auf dem Image auf ein lo-Dev gelegt: | ||
| + | > kpartx -av disk01.hdd | ||
| + | > kpartx -l disk01.hdd | ||
| + | loop0 : 0 16777089 /dev/loop0 63 | ||
| + | |||
| + | lo-Dev formatieren: | ||
| + | > mkfs -t ext4 / | ||
| + | |||
| + | mounten | ||
| + | > mount -o loop / | ||
| + | |||
| + | Daten drauf packen: | ||
| + | > tar xzf ubuntu_1004.tgz -C /mnt/ | ||
| + | |||
| + | alles wieder lösen: | ||
| + | > umount /mnt/ | ||
| + | > kpartx -dv disk01.hdd | ||
| + | |||
| + | ---- | ||
| + | **Variante 3 mit //'' | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | |||
| + | nachsehen, welches lo-Dev als erstes freies vorliegt: | ||
| + | > losetup -f | ||
| + | /dev/loop0 | ||
| + | |||
| + | Image an ein lo-Dev binden und dann partitionieren: | ||
| + | > losetup /dev/loop0 disk01.hdd | ||
| + | > fdisk /dev/loop0 | ||
| + | |||
| + | lo-Dev wieder lösen, damit es mit OffSet erneut gebunden werden kann | ||
| + | > losetup -d /dev/loop0 | ||
| + | |||
| + | das Image mit [[# | ||
| + | > losetup -o $OFFSET /dev/loop0 disk01.hdd | ||
| + | |||
| + | das Gerät an ein Verzeichnis mounten, damit man Daten reinschreiben kann: | ||
| + | > mount /dev/loop0 mnt | ||
| + | |||
| + | alles wieder lösen: | ||
| + | > umount /mnt/ | ||
| + | > losetup -d /dev/loop0 | ||
| + | |||
| + | |||
| + | === QEMU QCOW Image === | ||
| + | |||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | |||
| + | Image-Format ermitteln: | ||
| + | > file image.hdd | ||
| + | image.hdd: QEMU QCOW Image (unknown version) | ||
| + | |||
| + | > modprobe nbd max_part=63 | ||
| + | > qemu-nbd -c /dev/nbd0 image.hdd | ||
| + | > mount /dev/nbd0p1 /mnt/ | ||
| + | > ls /mnt/ | ||
| + | > umount /mnt/ | ||
| + | > qemu-nbd -d /dev/nbd0 | ||
| + | |||
| + | |||
| + | ==== Live-CD ==== | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | |||
| + | ==== initrd ==== | ||
| + | |||
| + | * [[https:// | ||
| + | |||
| + | |||
| + | === eine neue initrd bauen === | ||
| + | |||
| + | Sollten in dieser //initrd// auch nicht die benötigten Treiber drin sein, | ||
| + | dann müssen wir uns eine eigene //initrd// bauen. | ||
| + | |||
| + | Hier wird beschrieben, | ||
| + | * [[http:// | ||
| + | |||
| + | bevor wir jetzt unsere neue //initrd// bauen, | ||
| + | kontrollieren wir noch eine Option in zwei Dateien: | ||
| + | - / | ||
| + | * MODULES=list | ||
| + | * BOOT=local | ||
| + | - / | ||
| + | * update_initramfs=yes | ||
| + | |||
| + | wir müssen die Option auf " | ||
| + | um die gewünschten Treiber hier angeben zu können: | ||
| + | # vi / | ||
| + | |||
| + | jetzt können wir uns die neue //initrd// bauen: | ||
| + | # mkinitramfs -o / | ||
| + | |||
| + | |||
| + | === eine vorhandene Ubuntu-initrd (ab Ubuntu 9.10) modifizieren === | ||
| + | |||
| + | |||
| + | == entpacken == | ||
| + | |||
| + | # mkdir initrd | ||
| + | # cd initrd | ||
| + | # lzma -dc -S .lz ../ | ||
| + | |||
| + | **Bootprozess modifizieren** | ||
| + | |||
| + | Dazu müssen die Dateien im Verzeichnis // | ||
| + | * usr/ | ||
| + | * usr/ | ||
| + | |||
| + | Ubuntu 14.04: | ||
| + | > gzip -dc / | ||
| + | > zcat / | ||
| + | |||
| + | |||
| + | == verpacken == | ||
| + | |||
| + | Variante 1: | ||
| + | # mv -v ../ | ||
| + | # find . | cpio --quiet --dereference -o -H newc | lzma -7 > ../ | ||
| + | |||
| + | Variante 2: | ||
| + | # cd .. | ||
| + | # chroot initrd/ | ||
| + | # mkinitramfs -o /initrd.gz 2.6.38-11-generic | ||
| + | # exit | ||
| + | # gzip -dc initrd/ | ||
| + | |||
| + | |||
| + | ==== initrd von Ubuntu 13.04 ==== | ||
| + | |||
| + | Auch die initrd' | ||
| + | |||
| + | auspacken: | ||
| + | > mkdir /tmp/initrd | ||
| + | > cd /tmp/initrd | ||
| + | > zcat / | ||
| + | |||
| + | einpacken: | ||
| + | > cd /tmp/initrd | ||
| + | > find . | cpio --quiet --dereference -o -H newc | gzip -9 > ~/ | ||
| + | |||
| + | |||
| + | ==== Slackware-initrd ==== | ||
| + | |||
| + | * [[http:// | ||
| + | |||
| + | entpacken: | ||
| + | > zcat initrd.img > initrd.img.entpackt | ||
| + | > mount -o loop,rw initrd.img.entpackt /mnt/initrd | ||
| + | |||
| + | Im Verzeichnis lib/ sollten dann ein paar Kernel Module liegen. Dort kopierst du deinen Treiber hin. | ||
| + | Zudem mußt du in der linuxrc einen insmod / | ||
| + | |||
| + | danach: | ||
| + | > umount /mnt/initrd | ||
| + | > gzip -9 initrd.img.entpackt | ||
| + | > mv initrd.img initrd.img.old | ||
| + | > mv initrd.img.entpackt initrd.img | ||
| + | |||
| + | Nicht vergessen den lilo aufzurufen, falls dieser verwendet wird. | ||
| + | |||
| + | |||
| + | ==== squash-Image ==== | ||
| + | |||
| + | |||
| + | === entpacken === | ||
| + | |||
| + | # aptitude install squashfs-tools genisoimage | ||
| + | # unsquashfs filesystem.squashfs | ||
| + | # cd squashfs-root | ||
| + | # ... | ||
| + | |||
| + | |||
| + | === verpacken === | ||
| + | |||
| + | # ... | ||
| + | # cd .. | ||
| + | # rm -v filesystem.squashfs | ||
| + | # mksquashfs squashfs-root filesystem.squashfs -nolzma | ||
| + | # printf $(sudo du -sx --block-size=1 squashfs-root | cut -f1) > filesystem.size | ||
| + | |||
| + | |||
| + | ==== Cloud-Images ==== | ||
| + | |||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | |||
| + | === Cloud-Images saugen === | ||
| + | |||
| + | //Leider hat dieses Image keine Partition.// | ||
| + | |||
| + | > wget https:// | ||
| + | > tar xzf bionic-server-cloudimg-amd64.tar.gz | ||
| + | > fdisk -l bionic-server-cloudimg-amd64.img | ||
| + | > mount bionic-server-cloudimg-amd64.img /mnt | ||
| + | |||
| + | das Image auf 20GB vergrößern: | ||
| + | > qemu-img resize -f raw bionic-server-cloudimg-amd64.img 20G | ||
| + | |||
| + | umwandeln in das platzsparende QCOW2-Format: | ||
| + | > qemu-img convert -p -f raw -O qcow2 bionic-server-cloudimg-amd64.img bionic-server-cloudimg-amd64.qcow2 | ||
| + | |||
| + | [[https:// | ||
| + | > modprobe nbd max_part=8 | ||
| + | > qemu-nbd --connect=/ | ||
| + | > fdisk -l /dev/nbd0 | ||
| + | > mount /dev/nbd0p1 /mnt/ | ||
| + | | ||
| + | > ls -lha /mnt/ | ||
| + | | ||
| + | > umount / | ||
| + | > qemu-nbd --disconnect /dev/nbd0 | ||
| + | > rmmod nbd | ||
| + | |||
| + | |||
| + | === Cloud-Images bauen === | ||
| + | |||
| + | //Leider hat dieses Image keinen OS-Kernel.// | ||
| + | |||
| + | //Bis Ubuntu 16.04 war der Partitionstyp DOS mit MBR.// | ||
| + | //Seit Ubuntu 18.04 ist das Image vom Partitionstyp GPT im EFI-Format.// | ||
| + | |||
| + | Vorbereitungen für das erzeugen eines Images: | ||
| + | > wget https:// | ||
| + | > apt install xz-utils libguestfs-tools | ||
| + | > xz -d bionic-server-cloudimg-amd64-root.tar.xz | ||
| + | |||
| + | Der User, der die Konvertierung durchführen soll, muß in der Gruppe " | ||
| + | > id | ||
| + | |||
| + | Jetzt muß überprüft werden, ob noch der DASH-Bug behoben werden muss, | ||
| + | wenn diese Datei nicht existiert: | ||
| + | > cat / | ||
| + | |||
| + | dann muss man sie anlegen: | ||
| + | > echo dash > / | ||
| + | |||
| + | sonst funktioniert es nicht. | ||
| + | |||
| + | so erzeugen wir unterschiedliche Images aus dem TAR-Paket: | ||
| + | > virt-make-fs -t ext4 --label root -s 20G bionic-server-cloudimg-amd64-root.tar bionic-server-cloudimg-amd64-root.hdd | ||
| + | > virt-make-fs -t ext4 --label root -s 20G --format=qcow2 bionic-server-cloudimg-amd64-root.tar bionic-server-cloudimg-amd64-root.qcow2 | ||
| + | > virt-make-fs -t ext4 --label root -s 20G --format=qcow2 --partition=mbr bionic-server-cloudimg-amd64-root.tar bionic-server-cloudimg-amd64-root.qcow2 | ||
| + | |||
| + | später kann man das erzeugte Image aber auch noch nach belieben in andere Formate konvertieren: | ||
| + | > apt install qemu-utils | ||
| + | > qemu-img convert -p -f qcow2 -O raw bionic-server-cloudimg-amd64.qcow2 bionic-server-cloudimg-amd64.img | ||
| + | > qemu-img info bionic-server-cloudimg-amd64.img | ||
| + | | ||
| + | > qemu-img info bionic-server-cloudimg-amd64-root.qcow2 | ||
| + | |||
| + | so kann man ein RAW-Image einhängen: | ||
| + | > apt install fdisk | ||
| + | > fdisk -l bionic-server-cloudimg-amd64-root.hdd | ||
| + | Festplatte bionic-server-cloudimg-amd64-root.hdd: | ||
| + | Einheiten: Sektoren von 1 * 512 = 512 Bytes | ||
| + | Sektorgröße (logisch/ | ||
| + | E/A-Größe (minimal/ | ||
| + | Festplattenbezeichnungstyp: | ||
| + | Festplattenbezeichner: | ||
| + | | ||
| + | Gerät | ||
| + | bionic-server-cloudimg-amd64-root.hdd1 | ||
| + | |||
| + | als OFFSET muss die " | ||
| + | > mount -o loop, | ||
| + | |||
| + | |||
| + | ===== HDD-Image bootfähig machen ===== | ||
| + | |||
| + | //Bis Ubuntu 16.04 war der Partitionstyp DOS mit MBR.// | ||
| + | //Seit Ubuntu 18.04 ist das Image vom Partitionstyp GPT im EFI-Format.// | ||
| + | |||
| + | |||
| + | ==== bootfähiges HDD-Image erzeugen ==== | ||
| + | |||
| + | benötigte Werkzeuge installieren (meistens sind sie bereits installiert): | ||
| + | > apt install wget tar xz-utils | ||
| + | |||
| + | //Wir holen uns ein (neues/ | ||
| + | //Dann bauen wir uns ein bootfähiges Image auf einer RAW-Partition (DOS-Partition) und MBR.// | ||
| + | |||
| + | in diesem Paket sind alle Dateien für ein lauffähiges Betriebssystem drin: | ||
| + | > wget --no-check-certificate https:// | ||
| + | > tar xzf bionic-server-cloudimg-amd64.tar.gz | ||
| + | > ls -lha bionic-server-cloudimg-amd64.img | ||
| + | -rw-r--r-- 1 fritz fritz 1,1G Sep 21 15:29 bionic-server-cloudimg-amd64.img | ||
| + | |||
| + | jetzt bauen wir uns ein leeres HDD-Image (hier 20GB groß) mit einer RAW-Partition (DOS-Partition) und MBR: | ||
| + | > mkdir /tmp/img | ||
| + | > virt-make-fs -t ext4 --label root -s 20G --format=raw --partition=mbr /tmp/img bionic-server-cloudimg-amd64.hdd | ||
| + | > ls -lha bionic-server-cloudimg-amd64.hdd | ||
| + | -rw-r--r-- 1 root root 20G Sep 21 19:35 bionic-server-cloudimg-amd64.hdd | ||
| + | | ||
| + | > mount bionic-server-cloudimg-amd64.img /mnt1 | ||
| + | > losetup -a | ||
| + | /dev/loop0: [64770]: | ||
| + | | ||
| + | > losetup -fP bionic-server-cloudimg-amd64.hdd | ||
| + | > losetup -a | ||
| + | /dev/loop1: [64770]: | ||
| + | /dev/loop0: [64770]: | ||
| + | | ||
| + | > ls -lha /dev/loop1* | ||
| + | brw-rw---- 1 root disk 7, 1 Sep 21 15:58 /dev/loop1 | ||
| + | brw-rw---- 1 root disk 259, 0 Sep 21 15:58 / | ||
| + | | ||
| + | > mount / | ||
| + | > df -h | ||
| + | ... | ||
| + | / | ||
| + | / | ||
| + | | ||
| + | > cd /mnt1/ | ||
| + | > cp -a * /mnt0/ | ||
| + | |||
| + | vergleichen, | ||
| + | > du -sm /mnt1/ /mnt0/ | ||
| + | 917 / | ||
| + | 917 / | ||
| + | | ||
| + | > find /mnt1/ | wc -l ; find /mnt0/ | wc -l | ||
| + | 66670 | ||
| + | 66670 | ||
| + | |||
| + | fertig | ||
| + | > umount /mnt1/ | ||
| + | |||
| + | Den Mount-Point "''/ | ||
| + | |||
| + | |||
| + | === Grub auf dem Image ausführen (bootfähig machen) === | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | > mount -B /proc/ /mnt0/proc/ | ||
| + | > mount -B /sys/ /mnt0/sys/ | ||
| + | > mount -B /dev/ /mnt0/dev/ | ||
| + | > mount -B /dev/pts/ / | ||
| + | | ||
| + | > chroot /mnt0 /bin/bash | ||
| + | > df -h | ||
| + | Filesystem | ||
| + | / | ||
| + | udev | ||
| + | |||
| + | damit er das Betriebsystem aus dem Host-System nicht findet: | ||
| + | > echo " | ||
| + | |||
| + | **WICHTIG!** hier muss das Gerät ''/ | ||
| + | > grub-install /dev/loop1 | ||
| + | Installing for i386-pc platform. | ||
| + | Installation finished. No error reported. | ||
| + | | ||
| + | > update-grub2 | ||
| + | Generating grub configuration file ... | ||
| + | Found linux image: / | ||
| + | Found initrd image: / | ||
| + | done | ||
| + | |||
| + | fertig | ||
| + | > umount / | ||
| + | > umount /mnt0/dev/ | ||
| + | > umount /mnt0/sys/ | ||
| + | > umount /mnt0/proc/ | ||
| + | > umount /mnt0/ | ||
| + | > losetup -a | ||
| + | /dev/loop1: [64770]: | ||
| + | | ||
| + | > losetup -d /dev/loop1 | ||
| + | |||
| + | Vorbereitung für VirtualBox: | ||
| + | > mv xenial-server-cloudimg-amd64-root.img test01.hdd | ||
| + | > qemu-img convert -p -f raw -O qcow2 test01.hdd test01.qcow2 | ||
| + | (100.00/ | ||
| + | | ||
| + | > ls test01.qcow2 | ||
| + | -rw-r--r-- 1 fritz fritz 1,1G Sep 21 16:28 test01.qcow2 | ||
| + | |||
| + | FIXME | ||
| + | //Leider bleibt die VM (in VirtualBox) beim booten stehen und kann den Bootvorgang nicht abschließen, | ||
| + | |||
| + | |||
| + | ==== Skripte für das mounten von HDD-Images mit Partitionen ==== | ||
| + | |||
| + | <hidden / | ||
| + | <file bash / | ||
| + | #/bin/bash | ||
| + | |||
| + | # | ||
| + | # | ||
| + | # / | ||
| + | # | ||
| + | # | ||
| + | |||
| + | VERSION=" | ||
| + | |||
| + | |||
| + | SKRIPTVERZ=" | ||
| + | #. ${SKRIPTVERZ}/ | ||
| + | |||
| + | # mount -o loop, | ||
| + | IMAGE_NAME=" | ||
| + | MOUNT_POINT=" | ||
| + | |||
| + | # | ||
| + | ### Parameterüberprüfung | ||
| + | |||
| + | if [ ! -e " | ||
| + | echo "Das Image ' | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | if [ ! -d " | ||
| + | echo "Der Mount-Point ' | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | BELEGT=" | ||
| + | if [ " | ||
| + | echo "Der Mount-Point ' | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | # | ||
| + | ### mount | ||
| + | |||
| + | losetup -fP " | ||
| + | LO_DEV=" | ||
| + | ls -lha ${LO_DEV}* | ||
| + | mount ${LO_DEV}p1 ${MOUNT_POINT} | ||
| + | |||
| + | # | ||
| + | ### Bind-Mount | ||
| + | |||
| + | mount -B /proc/ / | ||
| + | mount -B /sys/ / | ||
| + | mount -B /dev/ / | ||
| + | mount -B /dev/pts/ / | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <hidden / | ||
| + | <file bash / | ||
| + | #/bin/bash | ||
| + | |||
| + | # | ||
| + | # | ||
| + | # / | ||
| + | # | ||
| + | # | ||
| + | |||
| + | VERSION=" | ||
| + | |||
| + | |||
| + | SKRIPTVERZ=" | ||
| + | #. ${SKRIPTVERZ}/ | ||
| + | |||
| + | # umount /mnt/ | ||
| + | IMAGE_NAME=" | ||
| + | MOUNT_POINT=" | ||
| + | |||
| + | # | ||
| + | ### Parameterüberprüfung | ||
| + | |||
| + | #if [ ! -d " | ||
| + | # echo "Der Mount-Point ' | ||
| + | # exit 1 | ||
| + | #fi | ||
| + | |||
| + | BELEGT=" | ||
| + | if [ " | ||
| + | echo "Der Mount-Point ' | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | # | ||
| + | ### umount | ||
| + | |||
| + | umount / | ||
| + | umount / | ||
| + | umount / | ||
| + | umount / | ||
| + | umount / | ||
| + | |||
| + | LO_DEV=" | ||
| + | losetup -d ${LO_DEV} | ||
| + | ls -lha ${LO_DEV}* | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <hidden / | ||
| + | <file bash / | ||
| + | #!/bin/bash | ||
| + | |||
| + | # | ||
| + | # | ||
| + | # Dieses Skript baut aus den Image-Daten (z.B.: bionic-server-cloudimg-amd64.tar.gz) | ||
| + | # ein DOS-Image mit MBR (z.B.: bionic-server-cloudimg-amd64.hdd). | ||
| + | # | ||
| + | # / | ||
| + | # | ||
| + | # | ||
| + | |||
| + | VERSION=" | ||
| + | |||
| + | |||
| + | SKRIPTVERZ=" | ||
| + | Z=" | ||
| + | |||
| + | # ${0} bionic-server-cloudimg-amd64.tar.gz bionic-server-cloudimg-amd64.hdd 20G | ||
| + | DATEN_NAME=" | ||
| + | IMAGE_NAME=" | ||
| + | IMAGE_GR=" | ||
| + | |||
| + | # | ||
| + | ### Parameterüberprüfung | ||
| + | |||
| + | if [ ! -e " | ||
| + | echo "Das Image ' | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | if [ -e " | ||
| + | echo "Das Image ' | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | if [ " | ||
| + | IMAGE_GR=" | ||
| + | fi | ||
| + | |||
| + | # | ||
| + | ### Vorbereitungen | ||
| + | |||
| + | mkdir -v / | ||
| + | cp ${DATEN_NAME} / | ||
| + | |||
| + | cd / | ||
| + | |||
| + | |||
| + | Dz_NAME=" | ||
| + | D_NAME=" | ||
| + | if [ " | ||
| + | echo "Die Datei ' | ||
| + | exit 1 | ||
| + | else | ||
| + | # bionic-server-cloudimg-amd64.tar.gz -> bionic-server-cloudimg-amd64.img | ||
| + | tar xvzf ${Dz_NAME} | ||
| + | fi | ||
| + | |||
| + | |||
| + | mkdir -p / | ||
| + | echo " | ||
| + | virt-make-fs -t ext4 --label root -s ${IMAGE_GR} --format=raw --partition=mbr / | ||
| + | |||
| + | # | ||
| + | ### Datenübertragung | ||
| + | |||
| + | mkdir -pv /mnt0 | ||
| + | mkdir -pv /mnt1 | ||
| + | |||
| + | mount ${D_NAME} /mnt0 || exit 2 | ||
| + | |||
| + | losetup -fP " | ||
| + | LO_DEV=" | ||
| + | if [ " | ||
| + | echo "Es konnte kein Gerät erzeugt werden: ' | ||
| + | exit 11 | ||
| + | fi | ||
| + | ls -lha ${LO_DEV}* | ||
| + | |||
| + | mount ${LO_DEV}p1 /mnt1 || exit 3 | ||
| + | |||
| + | cd - | ||
| + | cd /mnt0/ || exit 4 | ||
| + | cp -a * /mnt1/ | ||
| + | |||
| + | cd - | ||
| + | umount /mnt0/ | ||
| + | umount /mnt1/ | ||
| + | |||
| + | LO_DEV=" | ||
| + | if [ " | ||
| + | for l in ${LO_DEV} | ||
| + | do | ||
| + | losetup -d ${l} | ||
| + | done | ||
| + | fi | ||
| + | ls -lha ${LO_DEV}* | ||
| + | |||
| + | mv / | ||
| + | rm -fr / | ||
| + | |||
| + | # | ||
| + | ### mount + update-grub2 | ||
| + | |||
| + | / | ||
| + | |||
| + | LO_DEV=" | ||
| + | if [ " | ||
| + | echo " | ||
| + | else | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | fi | ||
| + | sync | ||
| + | sleep 5 | ||
| + | |||
| + | / | ||
| + | </ | ||
| + | </ | ||
| + | |||
