Good to Know Database

Ubuntu 16.04: Root-Dateisystem auf die HDD transferieren


Standardmäßig bootet man den Odroid HC2 von einer MicroSD-Karte auf welcher sich die Boot- und Root-Partition befindet. Da SD-Karten nur eine begrenzte Anzahl an Schreibzyklen besitzen und es sehr häufig zu Dateisystemfehlern kommt wenn die Stromversorgung unterbrochen wird ohne dass das System ordnungsgemäß heruntergefahren wurde, stellt sich die Frage welche Alternativen es gibt. In dieser Anleitung soll die Root-Partition auf die Festplatte ausgelagert werden. Zum Booten wird auch weiterhin eine MicroSD-Karte benötigt, auf welcher sich nur noch die Boot-Partition befinden muss.

Benötigte Tools installieren

Aktualisieren Sie zuerst die lokale Paketdatenbank und installieren anschließend die Pakete gdisk und rsync.

root@odroid:~# apt-get update
root@odroid:~# apt-get install gdisk rsync

Festplatte partitionieren

Verschaffen Sie sich mit fdisk einen Überblick über die verfügbaren Datenträger und deren Devicenamen.

root@odroid:~# sudo fdisk -l

Hinweis: Im weiteren Verlauf wird davon ausgegangen, dass die Boot-Partition mit /dev/mmcblk0p1, die Root-Partition mit /dev/mmcblk0p2 und die Festplatte mit /dev/sda angesprochen wird. Sollte dies bei Ihnen nicht der Fall sein, müssen Sie bei den hier gezeigten Befehlen die entsprechenden Devicenamen anpassen. Sollten Sie einen falschen Devicenamen verwenden, kann dies zu Datenverlust führen.

Starten Sie jetzt gdisk, löschen die bestehenden Partitionen vom Datenträger /dev/sda und erstellen zwei neue Partitionen. In diesem Fall wird eine 20GB große Root-Partition und eine Datenpartition erstellt.

Beim Start von gdisk wird geprüft ob bereits eine GUID Partition Table auf dem Datenträger existiert. Ist dies nicht der Fall, wird gdisk automatisch eine GUID Partition Table erzeugen.

Hinweis: Beachten Sie, dass bei den folgenden Schritten alle Daten auf der Festplatte verloren gehen.

root@odroid:~# gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): d
Using 1

Command (? for help): n
Partition number (1-128, default 1):
First sector (34-3907029134, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-3907029134, default = 3907029134) or {+-}size{KMGTP}: +20G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): n
Partition number (2-128, default 2):
First sector (34-3907029134, default = 41945088) or {+-}size{KMGTP}:
Last sector (41945088-3907029134, default = 3907029134) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): p
Disk /dev/sda: 3907029168 sectors, 1.8 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 4E3A2292-28DF-4B5C-AA7E-61F8BC5013F5
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 3907029134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        41945087   20.0 GiB    8300  Linux filesystem
   2        41945088      3907029134   1.8 TiB     8300  Linux filesystem

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.

Dateisysteme anlegen

Nachdem die Partitionen /dev/sda1 und /dev/sda2 erstellt wurden, müssen Sie in diesen noch Ext4-Dateisysteme anlegen.

root@odroid:~# mkfs.ext4 /dev/sda1
mke2fs 1.42.13 (17-May-2015)
Creating filesystem with 5242880 4k blocks and 1310720 inodes
Filesystem UUID: acc568f8-4fe0-4727-b077-d199c39b5917
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000

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

root@odroid:~# mkfs.ext4 /dev/sda2
mke2fs 1.42.13 (17-May-2015)
Creating filesystem with 483135505 4k blocks and 120791040 inodes
Filesystem UUID: 6a9cd218-180f-4d36-a824-58c9d1bec1f5
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848

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

Systemdateien auf die Festplatte kopieren

Mounten Sie jetzt das zukünftige Root-Dateisystem in das Verzeichnis /mnt.

root@odroid:~# mount /dev/sda1 /mnt

Starten Sie jetzt die Datenübertragung von der MicroSD-Karte auf auf die Festplatte. Dieser Vorgang dauert je nach der Datenmenge auf der Root-Partition und der Übertragungsgeschwindigkeit mehrere Minuten.

root@odroid:~# rsync -ax --progress / /mnt/

Konfigurationsdateien anpassen

Sobald alle Daten erfolgreich übertragen wurden, sollten Sie die UUID der neuen Root-Partition mit blkid ermitteln. Die UUID benötigen Sie für die /etc/fstab damit das richtige Dateisystem in das Root-Verzeichnis von Linux gemountet wird. Des Weiteren muss die UUID in der /media/boot/boot.ini hinterlegt werden, damit der Kernel auf die Root-Partition zugreifen kann.

root@odroid:~# blkid /dev/sda1
/dev/sda1: UUID="acc568f8-4fe0-4727-b077-d199c39b5917" TYPE="ext4" PARTLABEL="Linux filesystem" PARTUUID="5bb16d76-4a1b-4a21-be31-e66487925ae7"

Öffnen Sie jetzt die /etc/fstab auf der neuen Root-Partition (also die Datei /mnt/etc/fstab) mit einem Editor.

root@odroid:~# nano /mnt/etc/fstab

Hier sollten Sie unter anderem die folgende Zeile vorfinden.

UUID=e139ce78-9841-40fe-8823-96a304a09859       /               ext4    errors=remount-ro,noatime       0 1

Ersetzen Sie die UUID der Root-Partition durch die zuvor ausgelesenen UUID der neuen Root-Partition.

UUID=acc568f8-4fe0-4727-b077-d199c39b5917       /               ext4    errors=remount-ro,noatime       0 1

Des Weiteren muss die Bootkonfiguration angepasst werden damit der Kernel die richtige Root-Partition verwendet. Öffnen Sie dazu die /media/boot/boot.ini mit einem Editor.

root@odroid:~# nano /media/boot/boot.ini

Suchen Sie hier nach der folgenden Zeile.

setenv bootrootfs "console=tty1 console=ttySAC2,115200n8 root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro fsck.repair=yes net.ifnames=0"

Ersetzen Sie bei der Option root wieder die UUID mit der UUID der neuen Root-Partition.

setenv bootrootfs "console=tty1 console=ttySAC2,115200n8 root=UUID=acc568f8-4fe0-4727-b077-d199c39b5917 rootwait ro fsck.repair=yes net.ifnames=0"

System neu starten

Sobald Sie alle Dateien übertragen und die beiden Konfigurationsdateien angepasst haben, können Sie die neue Root-Partition wieder aushängen und einen Neustart des Systems durchführen.

root@odroid:~# umount /mnt
root@odroid:~# shutdown -r now

Nach dem Neustart können Sie mit den Befehlen df -h und mount überprüfen ob die Root-Partition von der Festplatte (/dev/sda1) anstelle der von der MicroSD-Karte gemountet wurde.

root@odroid:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            930M     0  930M   0% /dev
tmpfs           200M  8.4M  192M   5% /run
/dev/sda1        20G  1.3G   18G   7% /
tmpfs           998M     0  998M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           998M     0  998M   0% /sys/fs/cgroup
/dev/mmcblk1p1  128M   12M  117M   9% /media/boot
tmpfs           200M     0  200M   0% /run/user/0
root@odroid:~# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=952168k,nr_inodes=186804,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=204240k,mode=755)
/dev/sda1 on / type ext4 (rw,noatime,errors=remount-ro,stripe=8191,data=ordered)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=25,pgrp=1,timeout=0,minproto=5,maxproto=5,direct)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
tracefs on /sys/kernel/debug/tracing type tracefs (rw,relatime)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mmcblk1p1 on /media/boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=204240k,mode=700)

Für den Fall, dass Ihr System wider Erwartens nicht mehr startet, mounten Sie die erste Partition der MicroSD-Karte auf einem anderen Linux-System und setzen in der Datei boot.ini die UUID zurück auf den alten Wert. Dadurch startet der Odroid HC2 wieder mit der Root-Partition auf der MicroSD-Karte.

Datenpartition einhängen

Nachdem die Root-Partition auf die Festplatte transferiert wurde, können Sie die zweite erstellte Partition als Datenpartition einhängen. Erstellen Sie hierfür zuerst das Verzeichnis /data.

root@odroid:~# mkdir /data

Ermitteln Sie anschließend die UUID der Datenpartition.

root@odroid:~# blkid /dev/sda2
/dev/sda2: UUID="6a9cd218-180f-4d36-a824-58c9d1bec1f5" TYPE="ext4" PARTLABEL="Linux filesystem" PARTUUID="91f14341-3bef-4480-98f1-fb2fb8cd9a6f"

Damit die Datenpartition automatisch beim Systemstart eingehängt wird, muss die /etc/fstab erweitert werden.

root@odroid:~# nano /etc/fstab

Fügen Sie am Ende der Datei die folgende Zeile mit der ermittelten UUID ein.

UUID=6a9cd218-180f-4d36-a824-58c9d1bec1f5       /data           ext4    defaults                        0 1

Nachdem Sie die Datei erweitert haben, können Sie die Datenpartition einhängen.

root@odroid:~# mount -a

Überprüfen Sie ob das Mounten erfolgreich war.

root@odroid:~# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=952168k,nr_inodes=186804,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=204240k,mode=755)
/dev/sda1 on / type ext4 (rw,noatime,errors=remount-ro,stripe=8191,data=ordered)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=25,pgrp=1,timeout=0,minproto=5,maxproto=5,direct)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
tracefs on /sys/kernel/debug/tracing type tracefs (rw,relatime)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mmcblk1p1 on /media/boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=204240k,mode=700)
/dev/sda2 on /data type ext4 (rw,relatime,stripe=8191,data=ordered)


Dieser Eintrag wurde am 31.03.2018 erstellt und zuletzt am 01.04.2018 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_40_2983.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer