Dateisystem


In den Dateisystemen wird festgelegt, wie Informationen auf Datenträger organisiert sind.




Folgende Liste zeigt einen Auszug verschiedener Dateisysteme.


Linux

  • ext → Extended File System – für Linux entwickelte Version des minix-Dateisystems.
  • ext2 → Second Extended File System – weiterentwickelte Variante von ext, lange Linux Standard.
  • ext3 → Third Extended File System – weiterentwickelte Variante von ext2 mit Journaling.
  • ext4 → Fourth Extended File System – weiterentwickelte Variante von ext3. Derzeit Standard bei vielen Linux Systemen wie z.B. Debian .
  • reiserfs → ein Journaling-Dateisystem.
  • reiser4 –> ein Journaling-Dateisystem mit Plugin-Unterstützung.




Unix

  • UFS → Unix File System - wird von Solaris und BSD verwendet.
  • XFS → Journaling-Dateisystem.
  • ZFS → Zetta File System - Dateisystem mit vielfältigem Volumenmanagement.
  • minix → minix Dateisystem.




Windows

  • fat → Dateisystem der FAT-(File-Allocation-Table)-Dateisystemfamilie unter MS-DOS. Gängig war diese Dateisystem für Disketten.
  • fat16 → neuere Variante mit erweiterten Limits.
  • fat32 → neuere Variante mit erweiterten Limits.
  • exfat → Flash-Speicher spezialisierte Version von fat32.
  • vfat → Virtual fat - Eine Optionale Erweiterung für fat12/ fat16/ fat32, die eine Unterstützung für lange Dateinamen und Sonderzeichen gewährleistet.
  • ntfs → New Technology File System - Journaling-Dateisystem von Windows. Seit Windows XP Standarddateisystem.




CD, DVD

  • ISO 9660 → Standarddateisystem für CDs.
  • Joliet → Erweiterung des ISO9660-Formats für längere Dateinamen mit Unicodezeichen.
  • Rockridge → Erweiterung des ISO9660-Formats für UNIX-artige Betriebssysteme (Dateirechte werden hier berücksichtigt).
  • UDF → Universal Disk Format - Standarddateisystem für DVDs und Blu-Rays.






In Linux und Unix sind Dateisysteme und Partitionen Verzeichnisse. Zum eintauchen in Verzeichnisse wird cd (Change Directory) verwendet. Der Verzeichnis Inhalt wird mit ls [-Optionen] ausgegeben.


Bedeutung der Verzeichnisse nach dem File Hierarchie Standard (FHS).


  • / ⇒ Das Wurzelverzeichnis ist der Beginn der Hierarchie.
  • /bin ⇒ enthält wichtige Programme, die für jeden Nutzer erreichbar sein sollen. Darf keine Unterverzeichnisse enthalten.
  • /boot ⇒ enthält zum Start des Systems notwendige Dateien. Statischer Teil des Kernels, Initiale Ramdisk, memtest86.bin.
    • /boot/grub ⇒ enthält Grub Bootloader Dateien. menu.lst, grub stage1 + 2.
    • /boot/grub/splashimages ⇒ Hintergrundbilder für Grub.
  • /dev ⇒ Abbildung von Gerätedateien und Hot Plug Dateisysteme.
  • /etc ⇒ enthält Konfigurationsdateien für Programme, Dienste und Systemeinstellungen.
    • /etc/opt ⇒ Konfigurationsdateien für Programme in /opt.
    • /etc/X11 ⇒ Konfigurationsdateien für den X-Server.
    • /etc/network ⇒ enthält Netzwerk Konfigurationsdateien.
    • /etc/init.d ⇒ Start und Stop Skripte für Dienste.
  • /home ⇒ enthält Nutzerverzeichnisse für alle User ausser root.
  • /lib ⇒ wichtige Funktionsbibliotheken des Systems.
    • /lib/modules ⇒ Kernelmodule.
    • /lib/udev ⇒ Bibliotheken und Programme für udev.
    • /lib/linux-restricted-modules ⇒ für eingeschränkte Treiber.
  • /lost+found ⇒ Dateien, die beim Versuch ein defektes System zu reparieren übriggeblieben sind.
  • /media ⇒ Einhängepunkte für transportable Medien.
    • /media/floppy ⇒ Disketten.
    • /media/cdrom0 ⇒ CD-Laufwerk.
  • /mnt ⇒ wird für temporär eingebundene Partitionen verwendet.
  • /proc ⇒ bildet alle aktuell laufenden Kernel Prozesse ab (Virtuelles Dateisystem).
  • /root ⇒ Verzeichnis des Superusers root.
  • /sbin ⇒ ausführbare Programme und Aufgaben der Systemverwaltung für Superuser (Systemprogramme).
  • /tmp ⇒ nimmt temporäre Dateien auf (Lese und Schreibrechte für alle User).
  • /usr ⇒ enthält installierte Programme, Systemtools und Bibliotheken (sekundäre Hirarchie).
    • /usr/bin ⇒ Programme, Desktop Umgebungen.
    • /usr/include ⇒ Header Dateien für C Programme.
    • /usr/lib ⇒ Bibliotheken.
    • /usr/local ⇒ gleiche Struktur wie /usr, für Programme die nicht von Paketverwaltung erfasst werden sollen und selbstentwickelte Programme und Scripte.
    • /usr/sbin ⇒ nicht unbedingt benötigte Systemprogramme.
    • /usr/share ⇒ für statische sich nicht ändernde Dateien.
    • /usr/share/man ⇒ Manpages.
  • /var ⇒ Dateien, deren Inhalt sich häufig verändert (z.B. Logdateien).
    • /var/log ⇒ Logdateien der Systemprogramme.
    • /var/games ⇒ Spielstände.
    • /var/spool ⇒ Druckaufträge, nicht abgeholte Mails.
  • /opt ⇒ Optionale Software mit eigenen Bibliotheken, die nicht zur Distribution gehören.
  • /srv ⇒ noch nicht genau spezifiziert. Bei SuSE Document Root Verzeichnis vom Apache Webserver Dienst httpd.
  • /sys ⇒ vom FHS noch nicht spezifiziert. Besteht aus Kernelschnittstellen. Wie /proc ein Virtuelles Dateisystem.



FIXME


Zusätzlich definierte Pfade:

  • /dev/null ⇒ Ausgabe verwerfen.
  • /dev/zero ⇒ Hier werden beliebig viele Null Bits generiert.
  • /dev/tty ⇒ Gerät auf dem der Prozess läuft.





/home


Das Verzeichnis /home ist das Heimatverzeichnis der im System angelegten Benutzer. Sie tragen auch die Namen der jeweiligen Benutzer (z.B. /home/ulli/).

Im Nutzerverzeichnis werden weitere Arbeits Verzeichnisse wie ~/Arbeisfläche, ~/Schreibtisch oder in älteren Systemen ~/Desktop, ~/Bilder, ~/Videos angelegt.

FIXME


Ein angemeldeter User kann zum Wechsel ins Heimatverzeichnis ~ (Tilde) als Abkürzung verwenden.

  • ~/Downloads ⇒ wechselt in das Download Verzeichnis des angemeldeten Benutzers.
  • ~ulli/Downloads ⇒ wechselt ins Download Verzeichnis des Benutzers ulli.




In der Konfigurationsdatei ~/.config/user-dirs.dirs im Heimatverzeichnis werden die Standardeinstellungen der Verzeichnisse für Benutzer abgelegt.

ulli@home:~$ cat ~/.config/user-dirs.dirs
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
# 
XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_TEMPLATES_DIR="$HOME/Vorlagen"
XDG_PUBLICSHARE_DIR="$HOME/Öffentlich"
XDG_DOCUMENTS_DIR="$HOME/Dokumente"
XDG_MUSIC_DIR="$HOME/Musik"
XDG_PICTURES_DIR="$HOME/Bilder"
XDG_VIDEOS_DIR="$HOME/Videos"




Auch Programme legen Einstellungen und Informationen im Heimatverzeichnis des Benutzers ab. So hat jeder Benutzer seine Programmeinstellungen gespeichert, ohne die Einstellungen anderer Benutzer zu ändern.


Beim starten von Anwendungen und Skripten die im Heimatverzeichnis abgelegt sind, muss der Pfad angegeben werden, da das Verzeichnis nicht in der $PATH Umgebungsvariable geführt ist.





Heimatverzeichnis verschieben


Mit usermod kann der Ort und Name des Heimatverzeichnisses geändert werden.


Syntax:

  • usermod -l [Nutzername neu] -d [/home/Nutzername neu] -m [Nutzername alt]




Optionen:

  • -l ⇒ neuer Benutzerlogin.
  • -d ⇒ neues Heimatverzeichnis (lässt man diesen Parameter weg, bleibt das alte Heimatverzeichnis erhalten.)
  • -m ⇒ enthaltene Dateien werden ins neue Heimatverzeichnis verschoben.
  • -a ⇒ weist dem Benutzer Gruppen zu (nur mit der Option -g benutzen.)
  • -g ⇒ Benutzer der Login Gruppe zuweisen. (die Gruppe muss vorhanden sein.)
  • -f ⇒ hier können die Tage angegeben werden, an dem der Account gelöscht wird. (0 deaktiviert den Account sofort.)




Beispiel:

root@home:~# usermod -l nadine -d /home/nadine -m ulli


Im Beispiel wird der Nutzer ulli in nadine umgewandelt und das Heimatverzeichnis nach /home/nadine/ verschoben.


Bei angemeldeten Benutzern kann usermod nicht durchführt werden.





/proc


Das Prozessdateisystem /proc ist ein virtuelles Dateisystem, in dem das System zur Laufzeit gespiegelt wird.


  • Die Kernel Information werden in hierarchischer Struktur angeordnet.
    • Infos über jeden laufenden Prozess.
    • Hardwareeinstellungen.
    • Netzwerkinformationen.
    • offene Dateien, Dateisperren.




Beispiel:

procinfo -fn2


Prozess Informationen mit einem Aktualisierungsintervall von 2 Sekunden ausgeben.



swap


Die swap Partition oder Datei ist ein virtuellen Speicher, der RAM Inhalte zwischenspeichern, bzw. auslagern kann.



Einrichten einer swap Partition


Um eine swap Partition zu Formatieren benötigt man das Programm mkswap. Eine Partition vom Typ82 kann vorher mit fdisk erstellt werden.


mkswap /dev/hd?


Swap Partition erstellen.


swapon -v [Gerät]


Swap Partition aktivieren.


Optionen für swapon:

  • -s ⇒ Zeigt verwendete swap Dateisysteme an.
  • -U ⇒ Aktiviert swap Dateisystem über die UUID.
  • -L ⇒ Aktiviert swap Dateisystem über ein Disk-Label.
  • -a ⇒ Aktiviert alle swap Dateisysteme, die in der /etc/fstab stehen.




swapoff -v [Gerät]


Swap beenden.


Ohne die Option -v erhält man keine Bestätigung, ob die neue swap Partition verwendet wird. Dass die neue swap Partition nach dem Systemstart verfügbar ist muss sie in die Datei /etc/fstab eingetragen werden.




/dev/hdb2    swap    swap    pri=42    0 0





Swap Speicher als Datei


Um einen swap Auslagerungsdatei zu erzeugen, muss zuerst eine Datei in gewünschter Grösse erzeugt werden.


dd if=/dev/zero of=~/swap_file bs=1024 count 524288


Hier werden Nullen in die Datei swap_file kopiert. Die Blockgrösse ist 1024 Bytes. Das wiederholt sich 524288 mal und es entsteht eine Datei, die aus 512 MB Nullen besteht.


mkswap ~/swap_file


Datei für swap formatieren.


swapon ~/swap_file


Swap für Datei starten.


Damit die swap Datei gleich nach dem Systemstart verfügbar wird muss die Datei /etc/fstab bearbeitet werden.

/swap_file    swap    swap    defaults    0 0




Mit dem Kommando cat /proc/swaps oder free kann man überprüfen ob der swap File aktiv ist.





FIXME




Zur eindeutigen Identifikation werden Dateisysteme mit UUIDs gekennzeichnet. Wie die Dateisysteme behandelt werden, wird in der Datei /etc/fstab geregelt. Hier können die Dateisysteme über UUIDs angesprochen und mount Optionen angepasst werden.



UUIDs anzeigen


Mit blkid können UUIDs von Dateisystemen ausgelesen werden. Die Zuordnung der UUIDs zu den Gerätedateien wird durch Softlinks aus der Datei /dev/disk/by-uuid hergestellt.


Syntax:

  • blkid [option] [device]




Beispiel:

root@home:~# blkid
/dev/sda1: UUID="E6589071400149FF" TYPE="ntfs" 
/dev/sda3: UUID="c2478a7d-56c6-78d2-a2d1-8654kc28be5a" TYPE="ext3" 
/dev/sda4: UUID="ggtr59e5-f578-66d0-e85c-08089jk70778" TYPE="ext3" 
/dev/sda5: UUID="45ef7f54-bcff-56b8-9dc2-1d7a2u7f3a5b" TYPE="swap" 
/dev/sda6: UUID="j78cd88d-1a4c-48ca-a984-cjj87tr9c7ed" TYPE="ext3" 
/dev/sda7: UUID="4r4t6j64-20cb-4981-aff0-8888t4a915c5" TYPE="ext3" 
/dev/sda8: UUID="666h75e6-sd57-sd5j-brr7-zz68dff44ae0" TYPE="ext3" 
/dev/sda9: UUID="35sfc730-dga4-46a5-add3-f6857f36b818" TYPE="ext3" 
/dev/sda10: UUID="sf3f910-3545-43500-bbe1-c7714c67777" TYPE="ext3" 




Optionen:

  • blkid ⇒ UUIDs aller vorhandenen Dateisysteme anzeigen.
  • -g ⇒ Cache leeren und UUIDs neu einlesen.
  • /dev/sda3 ⇒ liefert uuid von sda3.
  • -h ⇒ Kurzreferenz gebräuchlicher Parameter.
  • -t ⇒ Filtert nach Kriterium. Die Attribute LABEL, UUID, SEC_TYPE, TYPE können eingesetzt werden. Dabei werden nur Informationen über Datenträger ausgegeben auf die das Kriterium 100% zutrifft.
  • -l ⇒ Auf Kriterium passender Treffer wird ausgegeben. Nur zusammen mit (-t).
  • -L ⇒ Gibt Dateisystem zu einem Label aus.
  • -o [wert] ⇒ Formatierte Ausgabe (werte: value, list, device, full, udev).




Beispiel:

root@home:~#blkid -t TYPE=ntfs


Nur ntfs formatierte Geräte anzeigen.


root@home:~#blkid -o list


Formatierte Ausgabe.


root@home:~# ls -Al /dev/disk/by-uuid
insgesamt 0
lrwxrwxrwx 1 root root 10  1. Feb 23:55 666h75e6-sd57-sd5j-brr7-zz68dff44ae0 -> ../../sda8
lrwxrwxrwx 1 root root 11  1. Feb 23:55 sf3f910-3545-43500-bbe1-c7714c67777 -> ../../sda10
lrwxrwxrwx 1 root root 10  1. Feb 23:55 4r4t6j64-20cb-4981-aff0-8888t4a915c5 -> ../../sda7
lrwxrwxrwx 1 root root 10  1. Feb 23:54 45ef7f54-bcff-56b8-9dc2-1d7a2u7f3a5b -> ../../sda5
lrwxrwxrwx 1 root root 10  1. Feb 23:55 j78cd88d-1a4c-48ca-a984-cjj87tr9c7ed -> ../../sda6
lrwxrwxrwx 1 root root 10  1. Feb 23:55 c2478a7d-56c6-78d2-a2d1-8654kc28be5a -> ../../sda3
lrwxrwxrwx 1 root root 10  1. Feb 23:55 35sfc730-dga4-46a5-add3-f6857f36b818 -> ../../sda9
lrwxrwxrwx 1 root root 10  1. Feb 23:54 E6589071400149FF -> ../../sda1
lrwxrwxrwx 1 root root 10  1. Feb 23:55 ggtr59e5-f578-66d0-e85c-08089jk70778 -> ../../sda4


Hier werden UUIDs mit dem Kommando ls ausgelesen.



UUIDs ändern


ext


Bei ext2, ext3 und ext4 Dateisysteme kann die UUID mit tune2fs geändert werden.


Syntax:

  • tune2fs [UUID][Optionen][device]




Optionen:

  • random ⇒ erzeugt zufällige UUID.
  • time ⇒ setzt aus aktuellen Timestamp neue UUID.
  • clear ⇒ setzt UUID auf 00000000-0000-0000-0000-000000000000.





reiserfs


Bei reiserfs Dateisysteme kann zum ändern der UUIDs reiserfstune verwendet werden.


root@home:~#reiserfstune -u UUID /dev/device


Hier wird im ausgewählten device eine neue UUID (UUID) erzeugt.


root@home:~#reiserfstune -u $(uuidgen) /dev/device


Hier wird die neue UUID automatisch erzeugt.



swap


UUID in swap Partition setzen.


root@home:~#swapoff -v /dev/device
root@home:~#mkswap -U UUID /dev/device
root@home:~#swapon -v /dev/device





fat / ntfs


Unter Windows werden bei den Dateisysteme keine UUIDs, sondern Seriennummern verwendet. Mit disk dump kann die Seriennummer eines Datenträgers temporär gespeichert, bearbeitet und zurückgeschrieben werden.


devicefat16fat32ntfs
skip,seek396772
count448


Die Werte für skip (auslesen), seek (schreiben) und count stehen oben in der Tabelle.


Beispiel für ein ntfs Dateisystem:

root@home:~#dd if=/dev/<device> of=/tmp/ntfsnr bs=1 skip=72 count=8



root@home:~#dd if=/tmp/ntfsnr of=/dev/<device> bs=1 seek=72 count=8


Jetzt kann die Datei /tmp/ntfsnr mit einem Hexeditor bearbeitet und die Datei zurückgeschrieben werden.




Inodes ist eine Technik, in der Informationen über alle im System befindlichen Verzeichnisse und Dateien gespeichert werden. Inodes werden in Nummern angezeigt. Jeder Inode Nummer ist eine Datei zugeordnet. Werden Verzeichnisse oder Dateien verschoben, wird häufig nur der Inode Eintrag angepasst.


Inodes speichern folgende Informationen.

  • Rechte.
  • User,Gruppe.
  • Größe.
  • Zeitstempel.
    • Erzeugung.
    • Letzte Änderung.
    • Letzter Zugriff.
  • 12 Zeiger auf Datenblöcke.
  • 1 indirekter Zeiger (verweist auf weitere Datenblöcke).
    • 256 Zeiger.
  • Doppelt indirekter Verweis.
    • 256 indirekte Verweise.
  • Dreifach indirekter Verweis
    • 256 zweifache Verweise
  • Bis zu 16777216 Datenblöcke insgesamt.




Über die Bitmaps wird dargestellt, welche Blöcke und Inodes frei sind. In Gruppen werden folgende Inhalte zusammengefasst:

  • Kopie des Superblocks.
    • Informationen über Blockgrösse.
    • Status des Dateisystems.
  • Liste aller Gruppen.
    • Enthalten Infos über Gruppen und Inodes und deren Ort.
  • Bitmaps für Inodes und Datenblöcke.






Mit Journal werden alle zur Zeit bearbeiteten Dateioperationen im Dateisystem protokolliert und behalten ihren Zustand, bis die die Änderungen auf dem Datenträger vollständig gespeichert sind.

Das Journal Protokoll überprüft , ob eine Dateioperation vollständig ausgeführt wurde. Mit Journaling kann versucht werden, eine Dateioperation rückgängig zu machen. Dabei kann jedoch ein Datenverlust nicht ausgeschlossen werden.

Journaling ist z.B. bei Linux Systeme mit reiserfs und ab ext3 möglich. Bei Unix Systeme kann das Dateisystem XFS verwendet werden.


Journal Modi:

  • data=ordered ⇒ Standard Journaling, es werden nur Metadaten und keine Inhalte gespeichert. Dateien werden vom Journal erst als korrekt eingestuft, wenn sie Vollständig auf der Festplatte gespeichert sind. Nach einem Systemabsturz werden alle unvollständig gespeicherten Dateien erkannt, können jedoch nicht wiederhergestellt werden.


  • data=writeback ⇒ wie data=ordered, Journal wartet nicht auf den Abschluss der Dateioperation. Dieser Modus ist ein wenig schneller als data=ordered, durch das asynchrone Journaling kann die Datei aber ältere Daten enthalten.


  • data=journal ⇒ es werden Metadaten und Inhaltsdaten protokolliert. Dadurch müssen Änderungen ins Journal und Datei geschrieben werden, das ext3 Dateisystem wird dann etwas langsamer. Es können aber Dateien wiederhergestellt werden, die im Journal eingetragen sind.




Journaling mit mount in einem ext3 Dateisystem.

root@home:~#mount -t ext3 -o data=journal /dev/sda9 /public


In diesem Beispiel wird das Dateisystem /dev/sda9 mit Journaling als /public eingehängt. Bei einem Neustart des Systems, gehen diese Einstellungen verloren.


Journaling beim Systemstart.

In folgendem Beispiel wird die Datei /etc/fstab konfiguriert. Beim Systemstart wird die Datei /etc/fstab eingelesen und aktiviert das Journaling.

...
# /public was on /dev/sda9 during installation
UUID=e2er5730-f0a4-46a5-af73-fc5rr5w6b818 /public         ext3    data=journal        0       2
...


Der im Kernel integrierte Dienst kjournald aktualisiert dann regelmässig die Journal Datei und startet automatisch beim Systemstart oder wenn ein Dateisystem mit mount eingehängt wird.




Linux und Unix unterscheiden zwei Arten von Links. Mit dem Kommando ln werden standardmässig Hardlinks erstellt. Hardlinks können nur innerhalb einer Partition erstellt und nicht auf Verzeichnisse angewendet werden.

Softlinks (symbolische Links) können auf Verzeichnisse verweisen und Partitions übergreifend angewendet werden.
Links können auch mit dem Befehl cp -l (Hardlink) oder cp -s (Softlink) erstellt werden.




Bei einem Hardlink besitzen die Dateien, die aufeinander verlinkt sind, die gleiche Inode Nummer. Wird eine der verlinkten Dateien bearbeitet, verändern sich automatisch auch die verlinkten Dateien, da es sich tatsächlich um die gleiche Datei handelt.


Ein Hardlink kann nicht auf Verzeichnisse angewendet werden.




Syntax:

  • ln [opt] [ziel] [linkname]




Beispiel:

hans@home:~/workspace$ ls -li
insgesamt 12
362657 -rw-r--r-- 2 hans hans   57 11. Okt 22:48 datei1
566869 drwxr-xr-x 2 hans hans 4096 11. Okt 22:53 Dokumente1
566871 drwxr-xr-x 2 hans hans 4096 11. Okt 22:45 Dokumente2



hans@home:~/workspace$ ln datei1 Dokumente1/link1



hans@home:~/workspace$ ls -li Dokumente1
insgesamt 4
362657 -rw-r--r-- 2 hans hans 57 11. Okt 22:48 link1



Die Inode Nummer der Datei /workspace/datei1 362657, gleicht der Datei im Verzeichnis Dokumente/link1. Ein Zähler (im Beispiel 2) zeigt, wie viele Dateien miteinander verlinkt sind. Bearbeitet man Dateien, bleibt der Inhalt der verlinkten Dateien gleich. Erst wenn alle Links auf eine Datei gelöscht sind, ist die Datei wirklich gelöscht.




Softlinks können Festplatten übergreifend erstellt werden und auf Verzeichnisse verweisen. Mit ls wird bei symbolischen Links angezeigt, wo sich die Ursprungsdatei befindet. Wie viele Zähler (Links) auf die Ursprungsdatei verweisen wird bei ls nicht angezeigt.

Bei Softlinks wird nicht der Inode gespeichert, sondern auf die Pfadangabe und Dateinamen verwiesen. Softlinks verwenden die Berechtigungen der Zieldatei, der Softlink selbst hat immer lese, schreib und Ausführungsrechte (777).


Syntax:

  • ln -s [ziel] [linkname]




Beispiel:

hans@home:~/workspace$ ll
insgesamt 12
362361 -rw-r--r-- 1 hans hans    9 11. Okt 23:31 datei1
566869 drwxr-xr-x 2 hans hans 4096 11. Okt 23:31 Dokumente1
566871 drwxr-xr-x 2 hans hans 4096 11. Okt 22:45 Dokumente2



hans@home:~/workspace$ ln -s datei1 Dokumente1/link1



hans@home:~/workspace$ ls -li Dokumente1
insgesamt 0
566872 lrwxrwxrwx 1 hans hans 6 11. Okt 23:38 link1 -> datei1




hans@home:~/workspace$ ln -s Dokumente2 LinktoDoc2



hans@home:~/workspace$ ls -l
insgesamt 8
drwxr-xr-x 2 hans hans 4096 11. Okt 23:38 Dokumente1
drwxr-xr-x 2 hans hans 4096 11. Okt 22:45 Dokumente2
lrwxrwxrwx 1 hans hans   10 11. Okt 23:47 LinktoDoc2 -> Dokumente2




Wird bei einem Softlink die Ursprungsdatei oder Verzeichnis gelöscht geht, ist die Datei verloren und der Link zeigt ins Leere. Es entsteht dann ein Deadlink.




Tote Links mit dem Befehl find suchen.

hans@home:~$ find -L workspace/ -type l
workspace/LinktoDoc2
workspace/Dokumente1/link1






Dateisysteme, die beim Systemstart automatisch eingehängt (gemountet) werden sollen, sind in der Datei /etc/fstab eingetragen und verschiedenen mount Optionen eingestellt.



fstab


Beispiel einer /etc/fstab Datei.


# /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/sda4 during installation
UUID=f78ff9e5-f233-23d0-9e1c-29c741870778 /               ext3    errors=remount-ro 0       1
# /boot was on /dev/sda3 during installation
UUID=c3498a7d-50c6-48d2-a2d1-178cbc28be5a /boot           ext3    defaults        0       2
# /home was on /dev/sda6 during installation
UUID=b34cd82d-4d4e-46za-a014-cd781239c7ed /home           ext3    defaults        0       2
# /opt was on /dev/sda10 during installation
UUID=422af910-0945-4f00-bbe1-cf66utc64519 /opt            ext3    defaults        0       2
# /public was on /dev/sda9 during installation
UUID=e2er5730-f0a4-46a5-af73-fc5rr5w6b818 /public         ext3    data=journal        0       2
# /usr was on /dev/sda8 during installation
UUID=48i785e6-70de-45ed-b1b7-32d33c344rr0 /usr            ext3    defaults        0       2
# /var was on /dev/sda7 during installation
UUID=4dd47c64-20ab-4c81-agh0-951uu8a915c5 /var            ext3    defaults        0       2
# swap was on /dev/sda5 during installation
UUID=a0ef7f54-bg7f-4zz8-9di2-6666669f3a5b none            swap    sw              0       0
/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto     0       0
pluto:/share    /mnt/pluto                                 nfs    defaults        0       0




Die Felder haben folgende Bedeutung:

  • 1. Feld ⇒ Einzuhängendes Gerät als Device Name oder UUID. Hier können auch Resourcen eines anderen Systems eingetragen werden.
  • 2. Feld ⇒ Einhängepunkt des Dateisystems.
  • 3. Feld ⇒ Typ des Dateisystems.
  • 4. Feld ⇒ Mountoptionen.
  • 5. Feld ⇒ Sicherungsoptionen für dump. 0 Dateisystem wird nicht gesichert. 1 Daeisystem wird gesichert.
  • 6. Feld ⇒ Zeigt, ob und in welcher Reihenfolge fsck Dateisysteme überprüft.
    • 0 ⇒ Dateisystem wird nicht geprüft.
    • 1 ⇒ Dateisystem wird vorzugsweise geprüft.
    • 2 ⇒ Wird geprüft, nachdem Dateisysteme mit 1 geprüft wurden.




Optionen:

  • auto ⇒ ermöglicht automatisches einhängen mit mount -a.
  • noauto ⇒ verhindert automatisches einhängen mit mount -a.
  • usrquota ⇒ aktiviert die möglichkeit von Quota auf Userebene.
  • grpquota ⇒ aktiviert die möglichkeit von Quota auf Gruppenebene.
  • suid ⇒ ermöglicht Funktion von SUID Bits.
  • nosuid ⇒ verhindert Funktion von SUID Bits.
  • exec ⇒ erlaubt das ausführen von Dateien auf dem Dateisystem.
  • noexec ⇒ verhindert das ausführen von Dateien auf dem Dateisystem.
  • ro ⇒ Dateisystem wird im readonly Modus eingehängt.
  • rw ⇒ Dateisystem wird im read/write Modus eingehängt.
  • user ⇒ erlaubt einem normalen User das Dateisystem einzuhängen (kann nur vom selben User oder root ausgehängt werden).
  • nouser ⇒ verbietet einem normalen User das Dateisystem einzuhängen.
  • users ⇒ erlaubt einem normalen User das Dateisystem einzuhängen (kann von beliebigen User ausgehängt werden).
  • defaults ⇒ setzt Standardeinstellungen (Ausnahmen Kommagetrennt angeben).




Nach manueller Bearbeitung der /etc/fstab, sollte unter der letzten Zeile eine Leerzeile folgen.





mount


Mit mount Dateisysteme einhängen. Wird mount ohne Optionen ausgeführt, erhält man eine Auflistung der eingehängten Dateisysteme.


root@home:~# mount
/dev/hda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
procbususb on /proc/bus/usb type usbfs (rw)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)




Syntax:

  • mount [opt] [args] [/Pfad/zum/[Dateisystem|Gerät] [/Einhängepunkt]




Optionen:

  • -a ⇒ hängt alle Dateisysteme ein, die in der Datei /etc/fstab gelistet sind.
  • -r ⇒ hängt Dateisystem schreibgeschützt ein.
  • -w ⇒ hängt Dateisystem im lese/schreib Modus ein.
  • -t ⇒ gibt den Dateisystem Typ an.
  • -v ⇒ Verbose (geschwätzig).
  • -o ⇒ übergibt Mountoptionen.




Beispiele:

mount -t ext3 /dev/hdb2 /public


Ein ext3 Dateisystem Typ, /dev/hdb2 die Partition, die eingehängt werden soll und /public den Mountpoint und Bezeichnung.


mount /public


Ist das Dateisystem bereits in der Datei /etc/fstab gelistet, reicht die Angabe des Mountpoints aus.


mount -t iso 9660 /dev/hdc /media/cdrom0


CD Dateisysteme einhängen.


mount -o remount,rw /public


Mit der Option -o werden mount Optionen übergeben. Das Dateisystem /public wird mit Lese und Schreibrechte neu gemountet.



Netzwerkresourcen einhängen


Mit mount können auch entfernte Dateisysteme eingehängt werden.


mount -t nfs [hostname]:/zu/exportierendes/Verzeichnis


NFS Verzeichnisfreigabe einhängen.


mount -t smbfs -o username=hans,passwort=passwort //hans/daten /mnt/hans


Samba Verzeichnisfreigabe einhängen.



mtab


Ist Dateisystem eingehängt, trägt mount, den Dateisystem Typ, den Mountpoint und Optionen in die Datei /etc/mtab ein. Eine Ausnahme sind Dateisysteme, die mit der Option -n eingehängt sind.


root@home:~# cat /etc/mtab
/dev/hda1 / ext3 rw,errors=remount-ro 0 0
tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0
sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
procbususb /proc/bus/usb usbfs rw 0 0
udev /dev tmpfs rw,mode=0755 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0




Im /proc Dateisystem werden eingehängte Dateisysteme in jedem Fall gelistet, auch wenn die Option -n übergeben wurde.




cat /proc/mounts





umount


Dateisysteme aushängen.


umount /dev/hdb2




Sollte umount nicht ausgeführt werden, kann das daran liegen, dass sich noch Dateien im Systempuffer befinden. Mit sync wird der Schreibcache entleert und geänderte Blöcke auf die Festplatte geschrieben. Danach sollte umount funktionieren.




FIXME






Dateisystemkennungen
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 41 PPC PReP Boot 85 Linux extended c7 Syrinx
5 Extended 42 SFS 86 NTFS volume set da Non-FS data
6 FAT16 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility
8 AIX 4f QNX4.x 3rd part 8e Linux LVM df BootIt
9 AIX bootable 50 OnTrack DM 93 Amoeba e1 DOS access
a OS/2 Boot Manag 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 52 CP/M 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 54 OnTrackDM6 a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 61 SpeedStor a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary
16 Hidden FAT16 64 Novell Netware af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 65 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 70 DiskSecure Mult b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 75 PC/IX bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 80 Old Minix be Solaris boot ff BBT
1e Hidden W95 FAT1




Möchte man die Partitionierung eines Datenträgers ändern, sollte man die aktuelle Belegung genau kennen. Eine Übersicht aller Partitionen der Festplatten kann man im /proc Verzeichnis abfragen.




Beispiel:

root@home:~# cat /proc/partitions
major minor  #blocks  name

   3     0   19551168 hda
   3     1   18691596 hda1
   3     2          1 hda2
   3     5     859446 hda5






fdisk


Partitionen können mit dem Konsolen Frontend fdisk erstellt, bearbeitet und gelöscht werden.


Syntax:

  • fdisk [opt] [device]




Optionen:

  • a ⇒ toggle a bootable flag
  • b ⇒ edit bsd disklabel
  • c ⇒ toggle the dos compatibility flag
  • d ⇒ delete a partition
  • l ⇒ list known partition types
  • m ⇒ print this menu
  • n ⇒ add a new partition
  • o ⇒ create a new empty DOS partition table
  • p ⇒ print the partition table
  • q ⇒ quit without saving changes
  • s ⇒ create a new empty Sun disklabel
  • t ⇒ change a partition's system id
  • u ⇒ change display/entry units
  • v ⇒ verify the partition table
  • w ⇒ write table to disk and exit
  • x ⇒ extra functionality (experts only)




Beispiele:

fdisk -l


Eine Auflistung aller Partitionen ausgeben.


fdisk /dev/hda


Einrichten der ersten Festplatte mit fdisk.


Beispiel Partitionierung mit fdisk.


root@home:~# fdisk /dev/sdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): 




Nach dem Start kann man mit der Option [m] eine Übersicht über die Kommandos anzeigen lassen.

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Command (m for help): 




Durch die Option [n] wird das erstellen einer neuen Partition eingeleitet.

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)



Partition number (1-4): 1
First cylinder (1-19457, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-19457, default 19457): +58000MB


Das wird so oft wiederholt, soviele Partitionen erstellt werden sollen.


Command (m for help): p

Disk /dev/sdb: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x129e129d

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        7052    56645158+  83  Linux
/dev/sdb2            7053       13861    54693292+  83  Linux
/dev/sdb3           13862       19457    44949870   83  Linux

Command (m for help): 


Mit der Option [p] kann man dann die erstellten Partitionen überprüfen.


Ist die Partitionstabelle in Ordnung, kann sie mit [w] geschrieben werden.

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.


Die Partitionierung ist jetzt abgeschlossen. Die Dateisysteme können jetzt formatiert werden.



cfdisk


Das Programm cfdisk ist ein weiteres Menügeführtes intuitiv bedienbares Partitionierungswerkzeug.






gparted


Partitionierungs Programm für Grafische Oberflächen. In vielen Linux Live Distributionen ist gparted enthalten und eignet sich sehr zur Dateisystem Konfiguration. Die folgenden Abbildungen zeigen eine gparted Version 0.7.0 auf Debian 6.0.10 Squeeze System.













mkfs / mke2fs


Zur Formatierung von Dateisysteme kann mkfs oder mke2fs verwendet werden. Der Befehl mke2fs ist lediglich ein Hardlink auf mkfs.ext2, mkfs.ext3, mkfs.ext4.


Syntax:

  • mkfs [opt] [dateisystem] [device]


  • mkfs.ext2 ⇒ Erstellt ext2 und ext3 Dateisysteme. Für ext3 wird die Option -j (journal) benötigt.
  • mkfs.ext3 ⇒ Formatiert ext3 Dateisystem.
  • mkfs.ext4 ⇒ Formatiert ext4 Dateisystem.
  • mkfs.reiserfs ⇒ Erstellt Linux reiserfs Dateisystem.
  • mkfs.msdos ⇒ Erstellt MSDOS Dateisystem, auf diesem Dateisystem kann man kein Betriebssystem starten.
  • mkfs.vfat ⇒ Ist ein Softlink auf mkfsdosfs.
  • mkfs.ntfs ⇒ Erstellt NTFS Dateisysteme.
  • mkfs.xfs ⇒ Erstellt XFS Dateisysteme.
  • mkfs.cramfs ⇒ Erstellt cramFS Dateisystem. Es handelt sich hier um ein komprimiertes read-only Dateisystem, das für embedded Systeme verwendet wird.
  • mkfs.jfs ⇒ Erstellt das Dateisystem JFS.




Optionen:

  • -t [type] ⇒ Legt den zu Formatierenden Dateisystemtyp fest.
  • -c ⇒ Prüft das Gerät auf Fehlerhafte Sektoren.
  • -v ⇒ Verbose, Informativere Ausgabe.
  • -j ⇒ Erstellt ein Journal für ext3.
  • -L ⇒ Erstellt Volume Disk Label.




Beispiele:

root@home:~# mkfs -t ext3 -L pub /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Dateisystem-Label=pub
OS-Typ: Linux
Blockgröße=4096 (log=2)
Fragmentgröße=4096 (log=2)
Stride=0 Blöcke, Stripebreite=0 Blöcke
3547136 Inodes, 14161289 Blöcke
708064 Blöcke (5.00%) reserviert für den Superuser
Erster Datenblock=0
Maximale Dateisystem-Blöcke=0
433 Blockgruppen
32768 Blöcke pro Gruppe, 32768 Fragmente pro Gruppe
8192 Inodes pro Gruppe
Superblock-Sicherungskopien gespeichert in den Blöcken: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424

Schreibe Inode-Tabellen: erledigt                        
Erstelle Journal (32768 Blöcke): erledigt
Schreibe Superblöcke und Dateisystem-Accountinginformationen: erledigt

Das Dateisystem wird automatisch nach jeweils 35 Einhäng-Vorgängen bzw.
alle 180 Tage überprüft, je nachdem, was zuerst eintritt. Dies kann durch
tune2fs -c oder -i geändert werden.


Das Laufwerk sdb1 wird mit dem Dateisystem ext3 formatiert.


root@home:~# mkfs -t ext2 -j /dev/sdb1


Formatierung mit der Option ext2 -j.



Um eine Partition mit dem XFS Dateisystem zu formatieren, wird der Partitionstyp Linux 83 benötigt. XFS kann Journal verwenden, das auch auf einer anderen Partition angelegt werden kann. Für die Wartung des Dateisystems werden die Programme xfsprogs und xfsdump benötigt.


root@home:~# mkfs.xfs /dev/sdb1 -l logdev=/dev/sda1


Das XFS Dateisystem wird auf sdb1 erstellt, das Journaling auf sda1.



XFS Werkzeuge


Tools für XFS Dateisysteme. Zum reparieren müssen die Dateisysteme vorher ausgehängt werden. Das Dateisicherungsprogramm xfsdump sichert auch Dateiattribute.


  • xfs_growfs ⇒ Größe des Dateisystems nachträglich erweitern.
  • xfs_fsr ⇒ Dateisystem reorganisieren.
  • xfs_info ⇒ Informationen über Dateisystem.
  • xfs_metadump ⇒ Speichert Metainfos in eine Datei.
  • xfs_check ⇒ Dateisystem überprüfen. Journaldateien auf einer anderen Partition müssen mit -l /dev/sdx angegeben werden.
  • xfs_repair ⇒ XFS Dateisystem reparieren.
  • xfsdump ⇒ Zum sichern von XFS Dateisysteme.
  • xfsrestore ⇒ wiederherstellen von XFS Dateisysteme.



FIXME


Beispiele:

root@home:~# umount /dev/sdb1




root@home:~# xfs_repair /dev/sdb1




root@home:~# xfsdump -v trace -f /backups/xfs-save1 /xfs-device


Das xfs-device wird mit allen Dateiattributen nach /backups/xfs-save1 gesichert.


root@home:~# xfsrestore -f /backups/xfs-save1 /xfs-device


Dateisystem wird wiederherstellen.




Ein ext2 in ein ext3 Dateisystem konvertieren.


tune2fs -j /dev/hda2


Bei ext3 Dateisystemen handelt es sich eigentlich um ext2 mit Journaling.


Bei der Formatierung können folgende Kommandos angewendet werden:

mkfs -t ext3 /dev/hda2



mkfs -t ext2 -j /dev/hda2



FIXME




Programme zum Prüfen der Integrität von Dateisystemen.


Die zu prüfenden Dateisysteme dürfen während der Prüfung nicht eingehängt sein.





fsck, e2fsck


Mit dem Programm fsck können Dateisysteme auf ihre Igrentität und beschädigte Blöcke überprüft werden. Zur Überprüfung von ext2, ext3 Dateisystemen steht auch das Programm e2fsck zur Verfügung. Bei e2fsck handelt es sich um Hardlinks auf die Programme fsck.ext2 und fsck.ext3. Zur Dateisystemprüfung können auch Live Systeme, wie z.B. grml verwendet werden.


Die Backends für die Dateisystemprüfung können auch direkt aufgerufen werden.

  • fsck.ext2 ⇒ prüft ext2 und ext3 Dateisysteme.
  • fsck.ext3 ⇒ ist ein Hardlink zu fsck.ext2 und e2fsck.
  • fsck.reiserfs ⇒ prüft reiserfs Dateisysteme.
  • fsck.mimix ⇒ prüft minix Dateisysteme.
  • fsck.cramfs ⇒ prüft cramfs Dateisysteme.
  • fsck.xfs ⇒ prüft XFS Dateisysteme.
  • fsck.jfs ⇒ prüft JFS Dateisysteme.
  • fsck.msdos und fsck.vfat ⇒ links zu dosfsck.




Optionen:

  • -f ⇒ (force) erzwingt die Prüfung.
  • -A ⇒ prüft alle Dateisysteme die in /etc/fstab eingetragen sind.
  • -t [Dateisystem Typ] ⇒ startet das passende Backend.
  • -c ⇒ sucht nach defekten Blöcken.
  • -b [Blocknummer] ⇒ gibt einen alternativen Superblock an.
  • -y ⇒ beantwortet alle fragen mit yes. Für unbeaufsichtigte Reperaturen.




Vor der Prüfung ist das aushängen des Dateisystems zwingend notwendig.




umount /dev/hdb2




Anschliessend kann die Prüfung durchgeführt werden.

fsck -f /dev/hdb2




Standardmässig wird das Dateisystem, je nach Distribution, in gewissen Intervalle beim Systemstart geprüft.




shutdown -rf now


Dateisystemprüfung nach dem Neustart unterbinden.


shutdown -sF now


Dateisystemprüfung nach dem Neustart erzwingen.



tune2fs


Dateisystemparameter von ext2/ext3/ext4 Dateisystemen können mit tune2fs bearbeitet werden.


Syntax:

  • tune2fs [opt] [device]




Optionen:

  • -c [n] ⇒ X Anzahl der Systemstarts zwischen den Dateisystemprüfungen.
  • -C [n] ⇒ legt fest, wie oft das Dateisystem nach der letzten Prüfung gestartet wurde.
  • -i [n] ⇒ legt Intervall zwischen Prüfungen in Tagen, Wochen oder Minuten fest. Ohne Optionen schaltet es die automatische Prüfung aus.
  • -T YYYYMMDD[[HHMM]SS] ⇒ legt Zeitpunkt fest, wann letzte Dateisystemprüfung stattgefunden hat.
  • -j ⇒ konvertiert ein ext2 in ein ext3 Dateisystem.
  • -1 ⇒ Superblock anzeigen.
  • -U ⇒ neue UUID für ext2, ext3 device setzen.
    • [neue uuid] [/dev/device] ⇒ setzt neue UUID.
    • random [/dev/….] ⇒ erzeugt zufällige UUID.
    • time [/dev/….] ⇒ erzeugt eine aus der aktuellen Uhrzeit generierte UUID.
    • clear [/dev/….] ⇒ löscht UUID (00000000-0000-0000-0000-000000000000).




Beispiel:

root@home:~#tune2fs -U random /dev/sda10


Neue Zufällige UUID generieren.



debugfs


Das Programm debugfs kann ext2, ext3 und ext4 Dateisysteme interaktiv untersuchen oder modifizieren. Es besteht auch die Möglichkeit, mit debugfs, gelöschte Dateien wiederherzustellen. Dazu muss das betroffene Dateisystem ausgehängt und mit debugfs geöffnet werden.


umount /dev/hdb2



debugfs /dev/hdb2


Öffnen des Dateisystems mit debugfs.


Gibt man am Prompt lsdel ein, werden gelöschte Inodes angezeigt. Anschliessend die Datei mit dem dump wiederherstellen, das Dateisystem mounten und die Datei von /tmp/restored zurück kopieren.

dump [inodenr] /tmp/restored





dumpe2fs


Mit dumpe2fs können detaillierte Informationen über ext2, ext3 und ext4 Dateisysteme angezeigt werden. Wegen der umfangreichen Ausgabe kann die Ausgabe auch an less weitergeleitet werden.

dumpe2fs /dev/hda1 | less





mke2fs


Mit mke2fs können ext2/ ext3/ ext4 Dateisysteme erstellt, umgewandelt und überprüft werden.


Syntax:

  • mke2fs [opt] [args] [Dateisystem]




Optionen:

  • -c ⇒ prüft Partition auf bad blocks, bevor das Dateisystem erstellt wird.
  • -L ⇒ erstellt ein Label (Namen) für ein ausgewähltes Dateisystem.
  • -j ⇒ erstellt ein ext3 Dateisystem mit Journaling.
  • -t [fs-type] ⇒ erstellt angegebenes Dateisystem.




Beispiele:

root@home:~# mke2fs -c /dev/hdb2


Prüft die Partition auf Bad Blocks, bevor das Dateisystem erstellt wird.



Um Dateisysteme zu überprüfen oder zu reparieren, muss zuerst ermittelt werden, welcher Gerätedatei dem Verzeichnis zugewiesen ist.

root@home:~# mount
/dev/sda4 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/sda3 on /boot type ext3 (rw)
/dev/sda6 on /home type ext3 (rw)
/dev/sda10 on /opt type ext3 (rw)
/dev/sda9 on /tmp type ext3 (rw)
/dev/sda8 on /usr type ext3 (rw)
/dev/sda7 on /var type ext3 (rw)




Als nächstes wird geprüft, ob eine Datei auf das auszuhängende Verzeichnis zugreift.

root@home:~# lsof /dev/sda10




Wenn keine Datei auf das Device zugreift, kann /dev/sda10 ausgehängt werden.

root@home:~# umount -v /dev/sda10
/dev/sda10 umounted




Eine erste Diagnose lässt sich beim wieder Einhängen ermitteln.

root@home:~# mount -v /dev/sda10
/dev/sda10 on /opt type ext3 (rw)




root@home:~# dmesg | tail -n3
[87962.192146] kjournald starting.  Commit interval 5 seconds
[87962.192386] EXT3 FS on sda10, internal journal
[87962.192395] EXT3-fs: mounted filesystem with ordered data mode.


Wenn hier Fehler ausgegeben werden oder das Dateisystem soll geprüft werden, muss es zuerst wieder ausgehängt werden.

root@home:~# umount -v /dev/sda10
/dev/sda10 umounted




Jetzt kann das Dateisystem mit fsck geprüft werden.

root@home:~# fsck -t ext3 -V /dev/sda10
fsck from util-linux-ng 2.17.2
[/sbin/fsck.ext3 (1) -- /opt] fsck.ext3 /dev/sda10 
e2fsck 1.41.12 (17-May-2010)
/dev/sda10: sauber, 36/427392 Dateien, 64226/1708800 Blöcke


Es wurden keine Fehler gefunden.


In der Datei /etc/fstab kann mit der Option errors=remount-ro bei einer Zugriffs Störung das mounten im nur-lesen Modus aktiviert werden, es können dann keine fehlerhaften Dateien geschrieben werden.






Quota


Quotas sind Beschränkungen für die Dateisystem Nutzung auf User oder Gruppenebene. Quotas werden pro Partition festgelegt. Es können alle in der /etc/fstab eingetragenen Dateisysteme eingeschränkt werden, sofern sie beschreibbar und in einem Linux-Dateisystem vorliegen. Die Beschränkung kann sich auf den Festplattenspeicherplatz oder auf die Anzahl der Daten, die angelegt werden dürfen, beziehen.


Damit Quotas verwendet werden können, werden usrquota und/ oder grpquota durch ein Komma getrennt in die Datei /etc/fstab eingetragen und mit dem Befehl mount -o remount,rw /devx wird die Datei neu eingelesen, wobei (/devx) für die jeweilige Partition steht.


Beispiel /etc/fstab:

# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
 proc            /proc           proc    defaults        0       0
 /dev/hda1       /               ext3    errors=remount-ro,usrquota,grpquota 0       1
 /dev/hda5       none            swap    sw              0       0
 /dev/hdc        /media/cdrom0   udf,iso9660 user,noauto     0       0
 /dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0




User Quotas stehen hierarchisch immer über Group Quotas.





quotacheck


Die Quota Dateien werden getrennt nach Benutzer (aquota.user) und Gruppen Quotas (aquota.group) im Hauptverzeichnis des einzuschränkenden Dateisystems eingerichtet. Diese Dateien sollten die Berechtigung 600 haben. Durch quotacheck wird die aktuelle Belegung ermittelt.


[root@localhost ~]# quotacheck -avugm




Optionen:

  • -a ⇒ prüft alle in der Datei /etc/fstab markierten Partitionen.
  • -v ⇒ verbose (geschwätzig).
  • -u ⇒ userquotas prüfen, erstellen (aktualisieren) der aquota.user Datei, falls erforderlich.
  • -g ⇒ groupquotas prüfen, erstellen (aktualisieren) der aquota.group Datei, falls erforderlich.
  • -m ⇒ remount in Read Only Modus unterdrücken.
  • -c ⇒ create, Schreiben der Dateien auf die Festplatte.
  • -f ⇒ force, Operation erzwingen.




Mit quotacheck -avugm entstehen in der eingeschränkten Partitionen die Dateien aquota.user bzw. aquota.group. Vorhandene Quota Dateien werden aktualisiert.


[root@localhost /]# ls -l
insgesamt 142
-rw-------   1 root root   7168 14. Okt 18:25 aquota.user
...




Manchmal müssen die Dateien manuell im Hauptverzeichnis des eingeschränkten Dateisystems erstellt und die Berechtigungen auf 600 eingestellt werden. Meistens werden die Dateien von quotacheck automatisch erstellt.


[root@localhost /]# touch aquota.user


Für User Quota.


[root@localhost /]# touch aquota.group


Für Group Quota.


[root@localhost /]# chmod 600 aquota*




Um nur die aquota.user Datei im Verzeichnis /public zu aktualisieren, gibt man folgenden Befehl ein. Dies kann auch mit der Option [g] auf Group Quotas angewendet werden.

[root@localhost /]# quotacheck -vu /public





Quota Werte einrichten


Nutzungslimits für Nutzer und Gruppen einrichten.



edquota


Beschränkung der Festplattennutzung auf Nutzer und Gruppenebene bearbeiten.


Syntax:

  • edquota [opt] [user|group] [-f Dateisystem]




Optionen:

  • -u ⇒ User Quota bearbeiten.
  • -g ⇒ Group Quota bearbeiten.
  • -p [Nutzer] ⇒ Übertragen von Nutzer oder Gruppenquotas auf andere Nutzer oder Gruppen.
  • -f [Dateisystem] ⇒ Dateisystem für Quotas auswählen. Standard sind alle Quotierten Dateisysteme.
  • -t ⇒ Grace Period für das Dateisystem (Default 0). Es werden die Einheiten sec, min, hour, day, week und month unterstützt.
  • -T ⇒ Grace Period für Benutzer und Gruppen. Die Einheiten sind wie bei (-t).




Beispiele:

[root@localhost /]# edquota -f / -u michel



Disk quotas for user michel (uid 500):
     Filesystem                   blocks   soft   hard inodes soft hard
     /dev/hda2                        28  61440  81920      7    0    0


Die Spalte blocks zeigt die vom Nutzer michel verwendeten Blöcke in Kilo Byte für diese Partition an. Die Spalte inodes zeigt die Anzahl der Dateien an, die dem Nutzer michel gehören. In den Spalten soft (Softlimit) und hard (Hardlimit) nach blocks, kann nun in blocks das Limit festgelegt werden.


  • Softlimit darf eine Festgelegte Zeit (Gracetime) überschritten werden.
  • Hardlimit ist das absolute Limit, wird dies überschritten kann der Nutzer die Datei nicht speichern oder sich ggf. nicht mehr einloggen.




Daher sollte das Softlimit immer unter dem Hardlimit gesetzt werden. Mit den zweiten Hard und Softlimitspalten läßt sich das Limit mit „Inodes“ (Dateien) setzen.


Ob ein Block aus 1024, 2048 oder 4096 Bytes besteht, kann mit dumpe2fs festgestellt werden.

[root@localhost /]# dumpe2fs -h /dev/hda1 | grep "Block size"
dumpe2fs 1.39 (29-May-2006)
Block size:                1024




[root@localhost /]# edquota -g [gruppe]


Quota Optionen für [gruppe] einstellen.


[root@localhost /]# edquota -u [nutzer]


Quotaoptionen für [nutzer] einstellen.


[root@localhost /]# edquota -p patti `awk -F: '$3 > 1000 {print $1}' /etc/passwd`


Alle Nutzer, deren ID > 1000 ist, werden mit den Quota Werten von patti besetzt.



gracetime


Mit dem Parameter gracetime wird die erlaubte Zeit festgelegt, in der das Softlimit überschritten werden darf.


[root@localhost /]# edquota -u -T michel




Allgemein für User.

[root@localhost /]# edquota -u -t




Grace Period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
  Filesystem    Block grace period    Inode grace period
  /dev/hdb2     2days                 2days





Quota Werte übertragen




[root@localhost /]# edquota -p user1 -u user2,user3,user4


Die Einstellungen von user1 werden auf alle anderen angegebenen Nutzer übertragen. (Kann auch auf Gruppen angewendet werden.



Quota aktivieren


quotaon


Mit quotaon werden Quotas aktiviert.


Syntax:

  • quotaon [opt] [Dateisystem]




Optionen:

  • -a ⇒ alle in der Datei /etc/fstab gekennzeichneten Partitionen aktivieren.
  • -u ⇒ Userquotas aktivieren.
  • -g ⇒ Groupquotas aktivieren.
  • -v ⇒ Verbose.




[root@localhost /]# quotaon -vu /
/dev/hda1 [/]: user quotas turned on




[root@localhost ~]# quotaon -augv
quotaon: using //aquota.user on /dev/hda1 [/]: Das Gerät oder die Ressource ist belegt


Eine Fehlermeldung wird angezeigt. Kann es sein, dass Quota schon aktiviert ist?



Quota deaktivieren


quotaoff


Mit quotaoff werden Quotas deaktiviert.


[root@localhost /]# quotaoff -vu /
/dev/hda1 [/]: user quotas turned off


Userquotas wurden deaktiviert.


[root@localhost /]# quotaoff -avug


Alle Quotas werden deaktiviert.


Wenn mit quotacheck Quota Dateien aktualisiert werden, müssen Quotas deaktiviert werden und ggf. die Option (-m) gesetzt werden.





Quotas anzeigen


Die angemeldeten Nutzer können mit quota deren Status anzeigen. Der Administrator root kann mit der Option -u [nutzer], die Einstellungen anderer User einsehen.


quota




Soll der Zugriff auf die Quota Einträge nur root gestattet werden.

[root@localhost /]# chmod 600 /quota.*





Bericht erstellen


repquota


Einen Bericht über die aktuellen Quotas und die Belegung des Dateisystems kann man mit repquota ermitteln. Dabei können folgende Kommandos angewendet werden. Je nach der installierten Version von Quota, funktionieren einige Optionen nicht mehr.


Syntax:

  • repquota [opt] [dev]




Optionen:

  • -a ⇒ gibt alle, in der Datei /etc/mtab gelisteten Dateisysteme aus.
  • -v ⇒ Verbose.
  • -u ⇒ Report Userquotas.
  • -g ⇒ Report Groupquotas.




Mit älteren Quota Versionen kann man mit folgenden Optionen einen Quota Bericht erstellen.

[root@localhost /]# repquota -avug /public



[root@localhost /]# repquota -avug /dev/hdb1





Optionen für neuere Quota Versionen.

[root@localhost /]# repquota -stguv -a



[root@localhost /]# repquota -a



*** Report for user quotas on device /dev/hdb1
Block grace time: 2days; Inode grace time: 2days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
michel    --      36   81920    100M              5     0     0
...
...




  • soft-limit ⇒ Limit, das kurzzeitig überschritten werden darf.
  • hard-limit ⇒ Absolutes limit.
  • grace-time ⇒ Zeitfrist in dem das Softlimit überschritten werden darf.






stat


Mit stat kann der Status einer Datei oder eines Dateisystems ermittelt werden. Je nach verwendeter Shell können die Optionen und Formate variieren.


Syntax:

  • stat [opt] [Datei|Verzeichnis]




Optionen:

  • -L ⇒ Verweisen folgen.
  • -f ⇒ Dateisystemstatus anstelle Dateistatus anzeigen.
  • -t ⇒ Informationen in Kurzform ausgeben.
  • -c [[Format][-][..]] ⇒ Das angegebene Format, anstelle von Vorgabe ausgeben.
  • --printf=[Format[\\n]] ⇒ wie -c, jedoch Zeilenumbruch möglich.




Format für Dateien:

  • %a ⇒ Zugriffsrechte im Oktalformat.
  • %A ⇒ Zugriffsrechte in menschenlesbarer Form.
  • %b ⇒ Anzahl der reservierten Blöcke (siehe %B).
  • %B ⇒ Die Größe jedes mit %b gemeldeten Blocks in Byte.
  • %C ⇒ SELinux-Sicherheitskontext-Zeichenkette.
  • %d ⇒ Gerätenummer in dezimaler Schreibweise.
  • %D ⇒ Gerätenummer in hexadezimaler Schreibweise.
  • %f ⇒ Raw-Modus in hexadezimaler Schreibweise.
  • %F ⇒ Dateityp.
  • %g ⇒ Gruppen‐ID des Eigentümers.
  • %G ⇒ Gruppenname des Eigentümers.
  • %h ⇒ Anzahl der Hardlinks.
  • %i ⇒ Inode-Nummer.
  • %n ⇒ Dateiname.
  • %N ⇒ Dateiname in Anführungsstrichen mit Zurückverfolgung, falls sym-link.
  • %o ⇒ E/A‐Blockgröße.
  • %s ⇒ Gesamtgröße in Byte.
  • %t ⇒ Major-Gerätetyp in hexadezimaler Schreibweise.
  • %T ⇒ Minor‐Gerätetyp in hexadezimaler Schreibweise.
  • %u ⇒ ID des Eigentümers.
  • %U ⇒ Name desDateieigentümers.
  • %x ⇒ Zeit des letzten Zugriffs.
  • %X ⇒ Zeit des letzten Zugriffs in Sekunden in Unixzeit.
  • %z ⇒ Zeit der letzten Statusänderung.
  • %Z ⇒ Zeit der letzten Statusänderung in Sekunden in Unixzeit.




Format für Dateisysteme:

  • %a ⇒ Freie Blöcke, die Nicht‐Superusern zur Verfügung stehen.
  • %b ⇒ Gesamte Datenblöcke im Dateisystem.
  • %c ⇒ Gesamte Dateiknoten im Dateisystem.
  • %d ⇒ Freie Dateiknoten im Dateisystem.
  • %f ⇒ Freie Blöcke im Dateisystem.
  • %C ⇒ SELinux-Sicherheitskontext-Zeichenkette.
  • %i ⇒ Dateisystem‐ID in hexadezimaler Schreibweise.
  • %l ⇒ Maximale Länge von Dateinamen.
  • %n ⇒ Dateiname.
  • %s ⇒ Blockgröße (für schnellere Übertragungen).
  • %S ⇒ Grundlegende Blockgröße (für Blockzahlen).
  • %t ⇒ Typ in hexadezimaler Schreibweise.
  • %T ⇒ Typ in menschenlesbarer Form.




Beispiele:

root@home:~# stat /etc
  File: „/etc“
  Size: 12288     	Blocks: 24         IO Block: 4096   Verzeichnis
Device: 804h/2052d	Inode: 488641      Links: 142
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2012-10-17 19:22:42.000000000 +0200
Modify: 2012-10-17 20:59:43.000000000 +0200
Change: 2012-10-17 20:59:43.000000000 +0200




root@home:~# stat -c%A-%F-%G-%U datei*
-rw-r--r---reguläre Datei-root-root
-rw-r--r---reguläre Datei-root-root
-rw-r--r---reguläre Datei-root-root




root@jupiter:~# stat --printf=%A\\n%F\\n%G\\n%U\\n datei1
-rw-r--r--
reguläre Datei
root
root




root@jupiter:~# stat -f -c%T /home
ext2/ext3




Je nach genutzter Shell, weichen die Optionen von einander ab. In diesen Fall wurde die GNU Bash-4.1 verwendet.




dd (disk dump)


Mit dd (disk dump) ist es möglich, ganze Patitionen sichern. Es wird eine Exakte 1:1 Kopie des Datenträgers ausgelesen und kopiert. Die zu sichernde Partition darf nicht ins Dateisystem eingehängt sein. Das Programm dd löscht alle Daten der Sicherungsfestplatte, es sei denn man speichert die Sicherung in eine Datei. Die Sicherung hat dabei immer die gleiche Grösse, als die zu sichernde Partition.



MBR (Master Boot Record) sichern




dd if=/dev/sda of=~/mbrSuSE bs=512 count=1




  • if → input file.
  • of → output file.
  • bs=wert → Blocksize.
  • count=wert → Anzahl Blöcke.
  • skip=wert → überspringe Blöcke vor Lesebeginn.
  • seek=wert → überspringe Blöcke vor Schreibbeginn.


  • * Für verschiedene Blockgrössen.
  • ibs=wert → Input Blocksize
  • obs=wert → Output Blocksize





unkomprimiertes Backup




# Backup anlegen
dd if=/dev/sda3 of=/media/sdb1/backup.img bs=1M
# Backup zurückspielen
dd if=/media/sdb1/backup.img of=/dev/sda3 bs=1M





komprimiertes Backup




# Komprimiertes Backup anlegen
dd if=/dev/sda3 bs=1M | gzip > /media/sdb1/backup.img.gz
# Komprimiertes Backup zurückspielen
gunzip -c /media/sdb1/backup.img | dd of=/dev/sda3 bs=1M





Einbinden eines unkomprimierten Backups



Zuerst wird das Backup an das loopdevice loop0 gehängt.

losetup /dev/loop0 /media/sdb1/backup.img




Aus Partitionstabelle die Anzahl der Sektoren auslesen und mit blocksize (bytes pro sector (z.B. 512)) multiplizieren.

fdisk -ul /dev/loop0
Disk /dev/loop0: 40.0 GB, 40007761920 bytes
255 heads, 63 sectors/track, 4864 cylinders, total 78140160 sectors
Units = sectors of 1 * 512 = 512 bytes
Disk identifier: 0xddcdcccd
Device Boot Start End Blocks Id System
/dev/loop0p1 * 63 15631244 7815591 7 HPFS/NTFS
/dev/loop0p2 15631245 16707599 538177+ 82 Linux swap / Solaris
/dev/loop0p3 16707600 26475119 4883760 83 Linux
/dev/loop0p4 26475120 78140159 25832520 5 Extended
/dev/loop0p5 26475183 78140159 25832488+ 83 Linux




Das loopdevice kann jetzt gelöscht werden.

losetup -d /dev/loop0




Um Partition 5 einzuhängen, wird 26475183 * 512 = 13555293696. Das Backup wird über ein loopdevice am Anfang der fünften Partition angesprochen.

losetup -o 13555293696 /dev/loop0 /media/sdb1/backup.img




Die Partition einbinden.

mkdir backup/
mount -t ext3 /dev/loop0 backup/





Cloud