Mdconfig: Unterschied zwischen den Versionen

Aus UUGRN
K (→‎Anwendungsbeispiel: Anmekung: distfiles und Packages)
K (Kategorie eingebaut)
 
(6 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 9: Zeile 9:
 
;/etc/rc.d/mdconfig2:  
 
;/etc/rc.d/mdconfig2:  
 
:* initialisiert Memory Disks mit type=vnode für Nicht-Root-Filesysteme (z.B. "/usr/ports")
 
:* initialisiert Memory Disks mit type=vnode für Nicht-Root-Filesysteme (z.B. "/usr/ports")
 +
  
  
Zeile 23: Zeile 24:
 
* Device (/dev/md0) erstellen
 
* Device (/dev/md0) erstellen
 
  # mdconfig -a -t vnode -f /pfad/zu/ports.ufs2
 
  # mdconfig -a -t vnode -f /pfad/zu/ports.ufs2
* Formatieren von /dev/md0 mit vielen kleines inodes
+
* Formatieren von /dev/md0 mit vielen 1kB kleinen inodes
 
  # newfs -L ports -O 2 -U -i 1024 -m 20 -o time /dev/md0
 
  # newfs -L ports -O 2 -U -i 1024 -m 20 -o time /dev/md0
 
* Vorübergehend mounten nach /mnt
 
* Vorübergehend mounten nach /mnt
Zeile 38: Zeile 39:
 
  mdconfig_md0="-t vnode -f /pfad/zu/ports.ufs2"
 
  mdconfig_md0="-t vnode -f /pfad/zu/ports.ufs2"
 
;/etc/fstab:
 
;/etc/fstab:
  /dev/md0                /usr/ports      ufs    rw              0      0
+
  /dev/md0                /usr/ports      ufs    rw,noauto             0      0
 +
;Wichtig: Das 6. Feld der /etc/{{man|freebsd|5|fstab}} wird beim Booten von {{man|freebsd|8|fsck}} ausgewertet. Steht hier etwas anderes als 0, dann unterbricht der Bootvorgang (single user mode), weil /dev/md0 zu diesem Zeitpunkt noch nicht verfügbar ist und daher nicht geprüft werden kann. Das gilt (für Post 7.0-RELEASE) auch für den Fall, wenn als Mountoption '''noauto''' verwendet wird, das hier jedoch unbedingt erforderlich ist.
 +
{{FIXME|Prüfen, ob die Mountoption ''noauto'' in Verbindung mit einem fsck-Wert >0 dazu führt, dass ein fsck von mdconfig2 ausgeführt wird}}
 +
 
 
* Konfiguration testen:
 
* Konfiguration testen:
 
  # umount /mnt
 
  # umount /mnt
Zeile 51: Zeile 55:
  
 
=== nachträglich vergrößern ===
 
=== nachträglich vergrößern ===
Sollte das erstelle File zu klein geraten sein, läßt sich dieses nachträglich aufbohren.
+
Sollte das erstellte File zu klein geraten sein, läßt sich dieses nachträglich vergrößern.
  
 
* Device anhalten/detachen
 
* Device anhalten/detachen
Zeile 58: Zeile 62:
 
  Destroying md0.
 
  Destroying md0.
 
* Vergrößern um 200MB
 
* Vergrößern um 200MB
  # dd if=/dev/zero bs=1m count=200m >> /pfad/zu/ports.ufs2
+
  # dd if=/dev/zero bs=1m count=200 >> /pfad/zu/ports.ufs2
 
* Device /dev/md0 von Hand attachen
 
* Device /dev/md0 von Hand attachen
 
  # mdconfig -a -t vnode /pfad/zu/ports.ufs2
 
  # mdconfig -a -t vnode /pfad/zu/ports.ufs2
Zeile 68: Zeile 72:
 
  Creating md0 device (vnode).
 
  Creating md0 device (vnode).
 
  Mounting /dev/md0.
 
  Mounting /dev/md0.
 
  
 
=== Anmerkung zum Beispiel ===
 
=== Anmerkung zum Beispiel ===
Zeile 77: Zeile 80:
 
* [[FreeBSD]]
 
* [[FreeBSD]]
 
* [[FreeBSD Ports]]
 
* [[FreeBSD Ports]]
 +
;Manpages:
 +
:*{{man|freebsd|8|mdconfig}}
 +
:*{{man|freebsd|4|md}}
 +
:*{{man|freebsd|5|rc.conf}}
 +
  
 
[[Kategorie:FreeBSD]]
 
[[Kategorie:FreeBSD]]
 
[[Kategorie:Anwendungsbeispiel]]
 
[[Kategorie:Anwendungsbeispiel]]
 +
[[Kategorie:Dateisystem]]

Aktuelle Version vom 28. April 2009, 08:47 Uhr

mdconfig ist unter FreeBSD das Konfigurationstool zur Verwaltung von RAM-Disks und andere Memory-Disks.

Scripte[Bearbeiten]

/etc/rc.d/mdconfig
  • initialisiert RAM-Disks (type=malloc)
  • Memory Disks im swap (type=swap)
  • persistente Memory Disks basierend auf einer Datei (type=vnode), wenn diese als Root-Filesystem ("/") angesprochen werden soll
/etc/rc.d/mdconfig2
  • initialisiert Memory Disks mit type=vnode für Nicht-Root-Filesysteme (z.B. "/usr/ports")


Anwendungsbeispiel[Bearbeiten]

Bekanntermaßen besteht unter FreeBSD /usr/ports aus vielen tausend kleinen Dateien, die sich mit der Zeit über das ganze Filesystem verteilen. Sämtliche Operationen auf /usr/ports wie etwa "du -sh" oder Backup dauern unverhältnismäßig lange.

Aus diesem Grund soll /usr/ports ein eigenes Filesystem bekommen, welches den speziellen Anforderungen gut nachkommt. Eine eigene Partition ("Label") hierfür wäre overkill, es bietet sich ein Filesystem-Image an.

/usr/ports als eigenes Filesystem erzeugen[Bearbeiten]

# dd if=/dev/zero of=/pfad/zu/ports.ufs2 bs=1m count=699
  • Device (/dev/md0) erstellen
# mdconfig -a -t vnode -f /pfad/zu/ports.ufs2
  • Formatieren von /dev/md0 mit vielen 1kB kleinen inodes
# newfs -L ports -O 2 -U -i 1024 -m 20 -o time /dev/md0
  • Vorübergehend mounten nach /mnt
# mount /dev/md0 /mnt
  • per tar|tar oder rsync das vorhandene /usr/ports/ übertragen
# rsync -avH /usr/ports/ /mnt/
oder
# (cd /usr/ports/ && tar cf - . ) | (cd /mnt/ && tar xvf - )
  • /usr/ports löschen oder wegschieben und neuen leeren Mountpoint erstellen
# mv /usr/ports /usr/ports_
# mkdir /usr/ports
  • automatisches Konfigurieren von /usr/ports/ über bootscripte einrichten
/etc/rc.conf
mdconfig_md0="-t vnode -f /pfad/zu/ports.ufs2"
/etc/fstab
/dev/md0                /usr/ports      ufs     rw,noauto              0       0
Wichtig
Das 6. Feld der /etc/fstab(5) wird beim Booten von fsck(8) ausgewertet. Steht hier etwas anderes als 0, dann unterbricht der Bootvorgang (single user mode), weil /dev/md0 zu diesem Zeitpunkt noch nicht verfügbar ist und daher nicht geprüft werden kann. Das gilt (für Post 7.0-RELEASE) auch für den Fall, wenn als Mountoption noauto verwendet wird, das hier jedoch unbedingt erforderlich ist.

FIXME: Prüfen, ob die Mountoption noauto in Verbindung mit einem fsck-Wert >0 dazu führt, dass ein fsck von mdconfig2 ausgeführt wird (siehe Diskussionsseite)


  • Konfiguration testen:
# umount /mnt
# mdconfig -d -u md0
# /etc/rc.d/mdconfig2 start
Creating md0 device (vnode).
Mounting /dev/md0.
  • prüfen:
# df -hi /usr/ports
Filesystem    Size    Used   Avail Capacity iused  ifree %iused  Mounted on
/dev/md0      664M    381M    150M    72%  115221 310825   27%   /usr/ports

nachträglich vergrößern[Bearbeiten]

Sollte das erstellte File zu klein geraten sein, läßt sich dieses nachträglich vergrößern.

  • Device anhalten/detachen
# /etc/rc.d/mdconfig2 stop 
Umounting /dev/md0.
Destroying md0.
  • Vergrößern um 200MB
# dd if=/dev/zero bs=1m count=200 >> /pfad/zu/ports.ufs2
  • Device /dev/md0 von Hand attachen
# mdconfig -a -t vnode /pfad/zu/ports.ufs2
  • Filesystem vergrößeren
# growfs /dev/md0
# mdconfig -d -u md0
  • Device neu starten
# /etc/rc.d/mdconfig2 start
Creating md0 device (vnode).
Mounting /dev/md0.

Anmerkung zum Beispiel[Bearbeiten]

Standardmäßig werden die Distfiles und Packages ebenfalls unter /usr/ports abgelegt. Dies ist nur begrenzt sinnvoll in diesem Beispiel. Es gibt Möglichkeiten, diese Standardpfade zu ändern (DISTDIR, PACKAGES).

siehe auch[Bearbeiten]

Manpages