Zwei Root-Partitionen eingehangen?

Du kommst mit der Installation nicht voran oder willst noch was nachfragen? Schau auch in den "Tipps und Tricks"-Bereich.
Antworten
Benutzeravatar
pangu
Beiträge: 1400
Registriert: 15.11.2011 20:50:52
Lizenz eigener Beiträge: GNU General Public License
Wohnort: /proc/1

Zwei Root-Partitionen eingehangen?

Beitrag von pangu » 28.06.2013 00:37:17

Hi all,

unabhängig von meinem aktuellen Beitrag zur Vergrößerung einer Festplatte ohne LVM, habe ich soeben auf einem meiner Hosts folgendes entdeckt: ich habe zwei Root-Partitionen eingehängt und kann mir das nicht erklären. Hier mal einige Outputs:

Code: Alles auswählen

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
# / was on /dev/xvda1 during installation
UUID=a84a7290-dff1-9ed1-3305-9581671a4d4d /               ext4    errors=remount-ro 0       1
# swap was on /dev/xvda5 during installation
UUID=718591ae-4991-38de-b191-395a5a5533c92 none            swap    sw              0       0

Code: Alles auswählen

# df -h
Dateisystem                                            Größe Benutzt Verf. Verw% Eingehängt auf
rootfs                                                  7,6G    3,1G  4,1G   43% /
udev                                                     10M       0   10M    0% /dev
tmpfs                                                   302M    144K  301M    1% /run
/dev/disk/by-uuid/a84a7290-dff1-9ed1-3305-9581671a4d4d  7,6G    3,1G  4,1G   43% /
tmpfs                                                   5,0M       0  5,0M    0% /run/lock
tmpfs                                                   679M       0  679M    0% /run/shm

Code: Alles auswählen

# mount -l
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,relatime,size=10240k,nr_inodes=381178,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=308300k,mode=755)
/dev/disk/by-uuid/a84a7290-dff1-9ed1-3305-9581671a4d4d on / type ext4 (rw,relatime,errors=remount-ro,user_xattr,acl,barrier=1,data=ordered)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=695020k)
rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
none on /proc/xen type xenfs (rw,relatime)
Laut der /etc/fstab wird ja nur 1x eingehangen. Warum zum Geier listet mir df -h die Root-Partition zwei mal auf?? Any clues?
Man gibt Geld aus, das man nicht hat, um damit Dinge zu kaufen, die man nicht braucht, um damit Leute zu beeindrucken, die man nicht mag.

NAB
Beiträge: 5501
Registriert: 06.03.2011 16:02:23
Lizenz eigener Beiträge: MIT Lizenz

Re: Zwei Root-Partitionen eingehangen?

Beitrag von NAB » 28.06.2013 02:24:11

Zu deiner Beruhigung: Das Root-Filesystem wurde natürlich nicht doppelt eingehangen ... df zeigt es nur doppelt an.

Warum es das tut, weiß ich allerding auch nicht.

Ich könnte mir vorstellen, dass gewisse Dateisysteme (btrfs) er ermöglichen, das Root-Dateisystem aus mehreren Partitionen zu speisen, und dann neben der Gesamtgröße des "rootfs" auch die Belegung auf den einzelnen Partitionen interessiert.
Never change a broken system. It could be worse afterwards.

"No computer system can be absolutely secure." Intel Document Number: 336983-001

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Zwei Root-Partitionen eingehangen?

Beitrag von Cae » 28.06.2013 03:04:06

Also, df macht, auf den fuer die Frage relevanten Teil herunter gebrochen, das hier:

Code: Alles auswählen

#include <stdlib.h>
#include <stdio.h>
#include <mntent.h>

int main (void) {
	struct mntent *mnt;
	FILE *fp;

	fp = setmntent("/etc/mtab", "r");
	if (fp == NULL) return 1;

	while ((mnt = getmntent(fp))) {
		printf("%s\t%s\t%s\t%i\t%i\n",
			mnt->mnt_fsname,
			mnt->mnt_dir,
			mnt->mnt_type,
			mnt->mnt_freq,
			mnt->mnt_passno
		);
	}

	if (endmntent(fp) == 0)
		return 2;
	
	return 0;
}
D.h. es liest auch einfach nur die /etc/mtab aus (zumindest unter Linux, das vom Zielsystem abhaengig). Wie man da drin sieht, taucht / zwei mal auf:

Code: Alles auswählen

rootfs / rootfs rw 0 0
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
...
/dev/mapper/main-root / ext4 rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0
Das ist auch richtig so, auf / sind zwei Dateisysteme gemountet. Wenn das System bootet, wird das initramfs (initrd) entpackt und nach / gemountet, lange, bevor irgendwelche fstab-Eintraege relevant werden. Das Skript init innerhalb der initrd schaut dann schliesslich in die /etc/fstab (der initrd, / ist ja noch nicht da) und mountet / sowie alle anderen Dateisysteme ohne Spezialitaeten wie noauto und _netdev (wobei ich hier nochmal nachgucken muesste, /usr und sowas koennte auch erst ausserhalb der initrd gemountet werden koennen). Das "richtige /" wird einfach ueber das / der initrd drueber gemountet.

df erkennt nun, dass es derselbe Mountpunkt ist und sagt: Auf / ist so und soviel Speicher frei (was ja auch stimmt, weil man nur auf das oberste Dateisystem zugreifen kann). Die Frage ist also eher, warum mount das nicht doppelt anzeigt, wie's in der /etc/mtab steht. Offensichtlich unterdrueckt mount den rootfs-Eintrag, wenn er an erster Stelle ist. Ich hab' spasseshalber mal meine /etc/mtab gefaelscht und das tmpfs fuer /tmp an die erste Stelle geschoben:

Code: Alles auswählen

$ mount
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,relatime,size=3736740k)
rootfs on / type rootfs (rw)
...
und schon ist das rootfs wieder da. Interessanterweise hab' ich im mount.c keinerlei Hinweise darauf gefunden, wie(so) ein rootfs an erster Stelle erkannt wird. Magie.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Benutzeravatar
Livingston
Beiträge: 1816
Registriert: 04.02.2007 22:52:25
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.0.0.1

Re: Zwei Root-Partitionen eingehangen?

Beitrag von Livingston » 28.06.2013 03:13:34

Komplett habe ich rootfs auch nicht verstanden, aber durch ein paar Experimente komme ich zu folgendem Ergebnis:
Ich habe mal eine initrd und eine initramfs komplett selbst gebaut und es gelang mir dabei jeweils, das Root-Verzeichnis "/" (in grub als Kernelparameter mitgegegeben) zu unmounten.
rootfs hatte danach quasi als fallback immer noch den Zugriff auf das Root-Verzeichnis ermöglicht.
Leider gibt die Kernel-Doku nicht viel preis. Dort wird aber zugesichert, dass rootfs immer vorhanden ist, um die Funktionsfähigkeit des Kernels zu gewährleisten.
/usr/src/linux-source-3.2/Documentation/filesystems/ramfs-rootfs-initramfs.txt hat geschrieben:What is rootfs?
---------------

Rootfs is a special instance of ramfs (or tmpfs, if that's enabled), which is
always present in 2.6 systems. You can't unmount rootfs for approximately the
same reason you can't kill the init process; rather than having special code
to check for and handle an empty list, it's smaller and simpler for the kernel
to just make sure certain lists can't become empty.

Most systems just mount another filesystem over rootfs and ignore it. The
amount of space an empty instance of ramfs takes up is tiny.
Ja, richtig gelesen: Die Doku des 3.2-Kernels bezieht sich auf den 2.6'er. Dieser Teil stammt aus dem Jahre 2005 8O

edit: Boa, Cae, während ich im Nebel stocher, schreibst Du ja schon alles, was man wissen muss :D

Benutzeravatar
pangu
Beiträge: 1400
Registriert: 15.11.2011 20:50:52
Lizenz eigener Beiträge: GNU General Public License
Wohnort: /proc/1

Re: Zwei Root-Partitionen eingehangen?

Beitrag von pangu » 28.06.2013 09:22:39

Hmm.... komisch. Denn das Verhalten habe ich nur auf diesem einen Host. Das da irgendwas mit meiner mtab nicht stimmt? und dann wäre aber die Frage wieso? Hat update-initrams irgendwie dazwischen gefuchtelt evtl. ? Fragen über Fragen ...
Man gibt Geld aus, das man nicht hat, um damit Dinge zu kaufen, die man nicht braucht, um damit Leute zu beeindrucken, die man nicht mag.

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: Zwei Root-Partitionen eingehangen?

Beitrag von cosmac » 28.06.2013 10:52:51

hi,
pangu hat geschrieben:Das da irgendwas mit meiner mtab nicht stimmt?
kann eigentlich nicht sein, weil /etc/mtab seit geraumer Zeit (jedenfalls seit wheezy) ein Link auf /proc/mounts sein sollte. Die Info kommt also direkt aus dem Kernel. Wenn man dem nicht traut... gibt es sehr ähnliche Daten in /proc/self/mountstats und /proc/self/mountinfo -- einmal mit rootfs und einmal ohne :mrgreen:
pangu hat geschrieben:Hat update-initrams irgendwie dazwischen gefuchtelt evtl. ?
noch unwahrscheinlicher; ich verwende sehr selten eine initrd und habe immer den doppelten Eintrag. Allerdings mit "rootfs" und "/dev/root" statt einem "normalen" Device, aber zum Ausgleich gibt es garkein /dev/root :)

Selbst wenn ich kein init-Script aufrufe (selbst /etc/init.d/rcS ist mein eigenes) bleibt es dabei. Der Kernel kann solche Scherze also ganz alleine. Damit wird es eher noch rätselhafter, warum es bei manchen System nichts doppelt gibt, weil ein umount anscheinend auch nicht funktioniert.
Beware of programmers who carry screwdrivers.

Antworten