# grub2 + btrfs + Gentoo + boot

## tps800

Hi!

nachdem es im dritten Anlauf gelungen ist, btrfs+grub2+gentoo zu installieren bootet das System. Soweit so gut. ABER: das Ganze bleibt hängen. Letzte Meldung auf dem Bildschirm: "A start job is running for dev-sda3.device ( ... / no limit )". Daran ändert sich nichts, auch nicht nach Tagen.

Irgendeine Idee, warum das an dieser Stelle hängen bleibt?

Die Installation wurde nach den Aleitungen im Gentoo-Wiki durchgeführt:

- https://wiki.gentoo.org/wiki/Handbook:AMD64

- https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Disks

daran anschliessend wurde die Partition entsprechend vorbereitet:

```
parted /dev/sda mklabel gpt

parted /dev/sda mkpart ext2 1M 4M

parted /dev/sda set 1 flag bios_grub on

parted /dev/sda mkpart linux_swap 4M 4G

parted /dev/sda mkpart btrfs 4G 100%FREE
```

Als nächstes die btrfs subvolumes:

```
mkdir G

mount /dev/sda3 G

cd G

alias sbv='btrfs subvol create'

sbv @

mkdir -p @/boot/grub

sbv @/boot/grub/i386-pc

sbv @/boot/grub/x86_64-efi

mkdir -p @/var

mkdir -p @/var/lib/libvirt

sbv @/var/tmp

sbv @/var/opt

sbv @/var/spool

sbv @/var/crash

sbv @/var/log

sbv @/var/lib/mailman

sbv @/var/lib/mariadb

sbv @/var/lib/mysql

sbv @/var/lib/named

sbv @/var/lib/pgsql

sbv @/var/lib/libvirt/images

sbv @/opt

sbv @/tmp

sbv @/srv

sbv @/home

sbv @/.snapshots
```

Ist der Schritt getan:

```
cd

umount G

function mb() {

  mount -o subvol=/@$1 /dev/sda3 G/$1

}

mount subvol=/@ /dev/sda3 G

mb boot/grub/i386-pc

mb boot/grub/x86_64-efi

mb var/tmp

mb var/opt

mb var/spool

mb var/crash

mb var/log

mb var/lib/mailman

mb var/lib/mariadb

mb var/lib/mysql

mb var/lib/named

mb var/lib/pgsql

mb var/lib/libvirt/images

mb opt

mb tmp

mb srv

mb home

mb .snapshots
```

Das sieht dann etwa so aus:

```
mount

/dev/sda3 on /.snapshots type btrfs (rw,relatime,space_cache,subvolid=258,subvol=/@/.snapshots)

/dev/sda3 on /var/opt type btrfs (rw,relatime,space_cache,subvolid=274,subvol=/@/var/opt)

/dev/sda3 on /srv type btrfs (rw,relatime,space_cache,subvolid=263,subvol=/@/srv)

/dev/sda3 on /usr/local type btrfs (rw,relatime,space_cache,subvolid=265,subvol=/@/usr/local)

/dev/sda3 on /tmp type btrfs (rw,relatime,space_cache,subvolid=264,subvol=/@/tmp)

/dev/sda3 on /var/tmp type btrfs (rw,relatime,space_cache,subvolid=276,subvol=/@/var/tmp)

/dev/sda3 on /boot/grub2/x86_64-efi type btrfs (rw,relatime,space_cache,subvolid=261,subvol=/@/boot/grub2/x86_64-efi)

/dev/sda3 on /opt type btrfs (rw,relatime,space_cache,subvolid=262,subvol=/@/opt)

/dev/sda3 on /var/spool type btrfs (rw,relatime,space_cache,subvolid=275,subvol=/@/var/spool)

/dev/sda3 on /boot/grub2/i386-pc type btrfs (rw,relatime,space_cache,subvolid=260,subvol=/@/boot/grub2/i386-pc)

/dev/sda3 on /var/lib/pgsql type btrfs (rw,relatime,space_cache,subvolid=272,subvol=/@/var/lib/pgsql)

/dev/sda3 on /var/lib/named type btrfs (rw,relatime,space_cache,subvolid=271,subvol=/@/var/lib/named)

/dev/sda3 on /var/crash type btrfs (rw,relatime,space_cache,subvolid=266,subvol=/@/var/crash)

/dev/sda3 on /var/lib/mysql type btrfs (rw,relatime,space_cache,subvolid=270,subvol=/@/var/lib/mysql)

/dev/sda3 on /var/lib/mariadb type btrfs (rw,relatime,space_cache,subvolid=269,subvol=/@/var/lib/mariadb)

/dev/sda3 on /var/lib/mailman type btrfs (rw,relatime,space_cache,subvolid=268,subvol=/@/var/lib/mailman)

/dev/sda3 on /var/lib/libvirt/images type btrfs (rw,relatime,space_cache,subvolid=267,subvol=/@/var/lib/libvirt/images)

/dev/sda3 on /var/log type btrfs (rw,relatime,space_cache,subvolid=273,subvol=/@/var/log)

/dev/sda3 on /home type btrfs (rw,relatime,space_cache,subvolid=259,subvol=/@/home)
```

dann Stage3 auspacken mit:

```
tar -xvjpf stage3...tar.bz2 --xattrs -C /root/G
```

Anschliessend noch die infrastruktur mounten:

```
mount -t proc proc /root/G/proc

mount --rbind /dev /root/G/dev

mount --rbind /sys /root/G/sys

cp -L /etc/resolv.conf /root/G/etc/resolv.conf

chroot /root/G /bin/bash

env-update; source /etc/profile; export PS1="(chroot) $PS1"
```

von dort jetzt:

```
emerge-webrsync

emerge gentoo-sources

emerge vanilla-sources

emerge git-sources

emerge systemd

emerge dracut

emerge grub:2
```

Kernel compilieren, systemd kompilieren, beides konfigurieren.

Netzwerksetup via systemd

fstab setup:

```
UUID=bdb631e5-cd4f-4018-ad26-f83ce64b1826 swap swap defaults 0 0

UUID=240bc0cd-521a-4875-b01d-d99883f9452e / btrfs subvol=@ 0 0

UUID=240bc0cd-521a-4875-b01d-d99883f9452e /boot/grub2/i386-pc btrfs subvol=@/boot/grub2/i386-pc 0 0

UUID=240bc0cd-521a-4875-b01d-d99883f9452e /boot/grub2/x86_64-efi btrfs subvol=@/boot/grub2/x86_64-efi 0 0

UUID=240bc0cd-521a-4875-b01d-d99883f9452e /opt btrfs subvol=@/opt 0 0

UUID=240bc0cd-521a-4875-b01d-d99883f9452e /srv btrfs subvol=@/srv 0 0

UUID=240bc0cd-521a-4875-b01d-d99883f9452e /tmp btrfs subvol=@/tmp 0 0

UUID=240bc0cd-521a-4875-b01d-d99883f9452e /usr/local btrfs subvol=@/usr/local 0 0

UUID=240bc0cd-521a-4875-b01d-d99883f9452e /var/crash btrfs subvol=@/var/crash 0 0

UUID=240bc0cd-521a-4875-b01d-d99883f9452e /var/lib/libvirt/images btrfs subvol=@/var/lib/libvirt/images 0 0

UUID=240bc0cd-521a-4875-b01d-d99883f9452e /var/lib/mailman btrfs subvol=@/var/lib/mailman 0 0

UUID=240bc0cd-521a-4875-b01d-d99883f9452e /var/lib/mariadb btrfs subvol=@/var/lib/mariadb 0 0

UUID=240bc0cd-521a-4875-b01d-d99883f9452e /var/lib/mysql btrfs subvol=@/var/lib/mysql 0 0

UUID=240bc0cd-521a-4875-b01d-d99883f9452e /var/lib/named btrfs subvol=@/var/lib/named 0 0

UUID=240bc0cd-521a-4875-b01d-d99883f9452e /var/lib/pgsql btrfs subvol=@/var/lib/pgsql 0 0

UUID=240bc0cd-521a-4875-b01d-d99883f9452e /var/log btrfs subvol=@/var/log 0 0

UUID=240bc0cd-521a-4875-b01d-d99883f9452e /var/opt btrfs subvol=@/var/opt 0 0

UUID=240bc0cd-521a-4875-b01d-d99883f9452e /var/spool btrfs subvol=@/var/spool 0 0

UUID=240bc0cd-521a-4875-b01d-d99883f9452e /var/tmp btrfs subvol=@/var/tmp 0 0

UUID=240bc0cd-521a-4875-b01d-d99883f9452e /.snapshots btrfs subvol=@/.snapshots 0 0

UUID=240bc0cd-521a-4875-b01d-d99883f9452e /home btrfs subvol=@/home 0 0
```

Grub installieren und konfigurieren. Mit "dracut" wurde danach die initramfs erzeugt.

Beim ersten Boot in das System gab es ein Problem: keines der Subvolumes wurde gefunden. Nach ändern von "subvol=@..." nach "subvol=/@..." sowie einer Neuinstallation von Grub klappte es sofort! Das System bootet. Allerdings bleibt es jetzt konsequent bei der Meldung "A start job is running for dev-sda3.device" hängen.

Irgendwas fehlt oder ist nicht vorhanden und das System wartet. Leider gibt es keine Information darüber, was gerade nicht funktioniert ...  :Sad: 

Was fehlt dem System um zu booten?

----------

## py-ro

Wow, das ist eine be.... menge an Snapshots. Und ich bin mir ziemlich sicher, dass deine fstab und deine Struktur nicht den Effekt hat den du möchtest. Du mountest die Sub-Volumes auf sich selbst, es wundert mich, dass der Abschnitt mit dem "mb" funktioniert haben soll, den alles Subvolumes die du erzeugt hast sind Kinder von "@" und damit sind Sie bereits "gemountet", wenn du "@" mountest.  

Das ganze macht so keinen Sinn.

Du versuchst also das Subvol auf das Subvol zu mounten, ohne es probiert zu haben, ist es wahrscheinlich das es dabei Probleme gibt.

In deiner fstab subvolid und subvol solltest auch jeweils nur eines angeben, ich bin mir nicht sicher was bei zwei Angaben passiert, vermutlich gewinnt die letzte (oder erste).

Bye

Py

----------

## Klaus Meier

Das ist anhand deiner Informationen nicht so ganz einfach zu sagen.

Eine Möglichkeit: Nutzt du systemd? Dann hast du eventuell folgendes vergessen: ln -s /proc/self/mounts /etc/mtab

Weiter Möglichkeit: Du hast die fstab nicht richtig angepasst.

----------

## tps800

 *Klaus Meier wrote:*   

> Das ist anhand deiner Informationen nicht so ganz einfach zu sagen.
> 
> Eine Möglichkeit: Nutzt du systemd? Dann hast du eventuell folgendes vergessen: ln -s /proc/self/mounts /etc/mtab
> 
> Weiter Möglichkeit: Du hast die fstab nicht richtig angepasst.

 

```
cd /etc

ll mtab

lrwxrwxrwx 1 root root 19 24. Apr 13:00 mtab -> ../proc/self/mounts
```

Also das ist es nicht. In /etc/fstab:

```
UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 / btrfs subvol=/@ 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /.snapshots btrfs subvol=/@/.snapshots 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /boot/grub/i386-pc btrfs subvol=/@/boot/grub/i386-pc 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /boot/grub/x86_64-efi btrfs subvol=/@/boot/grub/x86_64-efi 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /opt btrfs subvol=/@/opt 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /srv btrfs subvol=/@/srv 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /tmp btrfs subvol=/@/tmp 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /usr/local btrfs subvol=/@/usr/local 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /usr/portage btrfs subvol=/@/usr/portage 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /usr/portage/distfiles btrfs subvol=/@/usr/portage/distfiles 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /usr/portage/packages btrfs subvol=/@/usr/portage/packages 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /usr/portage/build-tmp btrfs subvol=/@/usr/portage/build-tmp 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /usr/src btrfs subvol=/@/usr/src 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /var/crash btrfs subvol=/@/var/crash 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /var/log btrfs subvol=/@/var/log 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /var/opt btrfs subvol=/@/var/opt 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /var/spool btrfs subvol=/@/var/spool 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /var/tmp btrfs subvol=/@/var/tmp 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /var/lib/libvirt/images btrfs subvol=/@/var/lib/libvirt/images 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /var/lib/mailman btrfs subvol=/@/var/lib/mailman 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /var/lib/mariadb btrfs subvol=/@/var/lib/mariadb 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /var/lib/mysql btrfs subvol=/@/var/lib/mysql 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /var/lib/named btrfs subvol=/@/var/lib/named 0 0

UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 /var/lib/pgsql btrfs subvol=/@/var/lib/pgsql 0 0

UUID=b2440022-18c4-495f-97ff-b71321713a9e /home xfs defaults 1 2

UUID=d7dde193-6dc8-4abd-ba67-a00cc7c6bb1f none swap sw 0 0
```

systemd sollte sich um /proc, /dev und /sys kümmern ...

/var/log/dmesg:

```
[    3.996584] BTRFS: device fsid 33709faa-f386-4ff0-b20c-60beb9a8fe74 devid 1 transid 435 /dev/sda3

[    3.998802] BTRFS info (device sda3): disk space caching is enabled

[    3.998908] BTRFS: has skinny extents

[    4.022400] usb 2-2: New USB device found, idVendor=0e0f, idProduct=0002

[    4.022505] usb 2-2: New USB device strings: Mfr=0, Product=1, SerialNumber=0

[    4.022611] usb 2-2: Product: VMware Virtual USB Hub

[    4.023824] hub 2-2:1.0: USB hub found

[    4.024136] hub 2-2:1.0: 7 ports detected

[    4.382197] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input5

[    4.382251] ACPI: Power Button [PWRF]

[    4.392200] ACPI: Deprecated procfs I/F for AC is loaded, please retry with CONFIG_ACPI_PROCFS_POWER cleared

[    4.392266] ACPI: AC Adapter [ACAD] (on-line)

[    4.416903] parport_pc 00:04: reported by Plug and Play ACPI

[    4.417056] parport0: PC-style at 0x378, irq 7 [PCSPP,TRISTATE]

[    4.462646] Floppy drive(s): fd0 is 1.44M

[    4.479724] FDC 0 is a post-1991 82077

[    4.515897] agpgart-intel 0000:00:00.0: Intel 440BX Chipset

[    4.516085] agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0x0

[    4.520864] piix4_smbus 0000:00:07.3: SMBus Host Controller not enabled!

[    4.526968] e1000 0000:02:01.0 enp2s1: renamed from eth0

[    4.600977] input: PC Speaker as /devices/platform/pcspkr/input/input6

[    4.649679] ppdev: user-space parallel port driver

[    4.709184] blk_update_request: I/O error, dev fd0, sector 0

[    4.709188] floppy: error -5 while reading block 0

[    4.810360] BTRFS info (device sda3): disk space caching is enabled

[    4.889764] Adding 4194300k swap on /dev/sda2.  Priority:-1 extents:1 across:4194300k

[    5.589825] XFS (sda4): Mounting V5 Filesystem

[    5.609612] XFS (sda4): Ending clean mount
```

Sieht auch soweit OK aus. Es werden die Filesysteme '/', '/home' gemounted.

Systemd schreibt nur nichts irgendwo hin, wo es auch auswertbar wäre -- die dazu notigen Verzeichnisse sind noch nicht gemounted. Sieht so aus, als ob der kernel es fertigbringt "/dev/sda3" auf "/" zu mounten, aber systemd dann beliebig lange auf das device "/dev/sda3" wartet ...

----------

## tps800

 *py-ro wrote:*   

> Wow, das ist eine be.... menge an Snapshots. Und ich bin mir ziemlich sicher, dass deine fstab und deine Struktur nicht den Effekt hat den du möchtest. Du mountest die Sub-Volumes auf sich selbst, es wundert mich, dass der Abschnitt mit dem "mb" funktioniert haben soll, den alles Subvolumes die du erzeugt hast sind Kinder von "@" und damit sind Sie bereits "gemountet", wenn du "@" mountest.  
> 
> Das ganze macht so keinen Sinn.
> 
> Du versuchst also das Subvol auf das Subvol zu mounten, ohne es probiert zu haben, ist es wahrscheinlich das es dabei Probleme gibt.
> ...

 

Nein, versuche ich nicht. Der Mount

```
mount -o subvol=/@ /dev/sda3 /
```

ist in fstab:

```
UUID=33709faa-f386-4ff0-b20c-60beb9a8fe74 / btrfs subvol=/@ 0 0
```

mounted die weiteren angelegten subvolumes nicht! D.h. die Verzeichnisse /opt, /tmp, /boot/grub/i386-pc, /boot/grub/x86_64-efi, ... sind sämtlich leer. Erst die folgenden Mounts füllen sie mit Inhalt (mount ist nicht rekursiv). Vorteil der verschiedenen Subvolumes: ich kann /opt, /tmp, usw. unterschiedlich behandeln. zum Beispiel keine snapshots von /var/log anfertigen, die bei einem Rollback das alte log löschen würden. Oder für mysql, mariadb, pgsql cow abschalten und für andere subvolumes compression einschalten und, und, und.

 *py-ro wrote:*   

> In deiner fstab subvolid und subvol solltest auch jeweils nur eines angeben, ich bin mir nicht sicher was bei zwei Angaben passiert, vermutlich gewinnt die letzte (oder erste).

 

Der "mount"-Befehl leifert beides. beim mounten selbst ist die subvolid nicht hilfreich: sie kommt immer mehrfach vor.

----------

## py-ro

Wenn die subvolid mehrfach, für verschiedene Subvolumes, vorkommt, ist was kaputt.

Warum du soviele Subvolumes anlegst ist mir schon klar.

Wenn das mit den Submounts leer stimmt, dann sind die nicht so angelegt wie, im ersten Posting beschrieben, bzw. du hast nicht "/" im Namen verwendet oder?

----------

## tps800

 *py-ro wrote:*   

> Wenn das mit den Submounts leer stimmt, dann sind die nicht so angelegt wie, im ersten Posting beschrieben, bzw. du hast nicht "/" im Namen verwendet oder?

 

Nein. "/" ist nicht Teil des Namens.

----------

