19.04.2023

Linux System

Linux Tastenkombinationen
Konfigurations-Dateien und Verzeichnisse unter Linux
System Anpassung
Systemreparatur
Bootmanager - Grub2/Grub/LiLo
Hardwareerkennung
Paket-Verwaltung
Init-System SysV-Init, Systemd, Upstart, Busybox u.a.
System Protokollierung - syslog
PAM Zugriffssteuerung
Admin-Rechte-Steuerung
Kernel 2.4 | 2.6
Linux Intrusion Detection System (LIDS)
User Mode Linux UML
Dateisysteme
Drucken unter Linux
Sound konfigurieren
Partition kopieren
IPX Protokoll
SoftwareRAID
Netzwerk
Bluetooth
X-Server und Desktops
64Bit und 32Bit auf einem System
ACPI System einrichten
Shared Libraries
Linux Console
Jobs mit cron automatisieren
PCMCIA
ISDN und Capi
VNC-Server einrichten
Verschlüsselter Zugriff auf Ressourcen übers Netzwerk
Festplatten Überwachen mit S.M.A.R.T
Linux Systemhilfe richtig verwenden
sudo konfigurieren
Installation aus den Sourcen
SCSI Emulation für ATAPI Geräte einrichten
cloop (Komprimiertes Loopback Device) einrichten
Übersicht ext2 / ext3 Zusatzflags
Versionsverwaltung von Dateien
SSHFS einrichten
Linux unter VMware
sonstiges

Navigation:

Links:

Seitenanfang

Dateisysteme

Seitenanfang

Ext3

Ext3 tunen

Ist eine Weiterentwicklung von Ext2 und wurde durch ein Journal ergänzt. Kann bis max. 16 TByte Dateisystemgröße und 2 TByte Dateigröße verwalten. Ext3 verwendet die Blockadressierung. Der Inode hat 32 Bit für die Adressierung von Blocknummern zur Verfügung, es werden mehrere Sektoren der Platte (512 Byte je PlattenSektor) zu einem Block zusammengefasst. Die Blockgröße wird mit mke2fs -b festgelegt und kann wie folgt angezeigt werden. Die Standard Blockgröße ist 4096 Byte.

tune2fs -l /dev/sda2 | grep "Block size"

Das Journal hat eine Standardgröße von 128 MByte, ein Journal-Blöck hat 4096 Byte und es sind 32768 Journal-Blöcke.

- Das wird durch ext3grep gezeigt.

ext3grep /dev/sda2 --journal --superblock

- Zeigt den Datenblock in dem ein Journal-Block gespeichert ist.

ext3grep /dev/sda2 --journal --journal-block 1 | grep "Block [0-9]"

max. 32.000 Unterverzeichnisse in einem Verzeichnis
- 128 Byte ist die Standardgröße je Inode

tune2fs -l /dev/sda2 | grep "Inode size"

 

Ein Ext3 läßt sich auch als Ext4 mounten.

Ext2 in Ext3 konvertieren

System in Single User Mode fahren, Partition konvertieren und die regelmäßige Prüfung der Part.(nach 20 Mount-Vorgängen oder 120 Tagen) deaktivieren.

init S
tune2fs -j /dev/[PARTITION]
tune2fs -c 100 -i 180 /dev/[PARTITION]

/etc/fstab prüfen wie das Dateisystem gemountet wird.

- aktive Optionen anzeigen

root@xxx:~# debugfs /dev/sda2
debugfs 1.41.4 (27-Jan-2009)
debugfs:  features
Filesystem features: has_journal resize_inode dir_index filetype
needs_recovery sparse_super large_file

 

Seitenanfang

Ext4

Ist eine Weiterentwicklung von Ext3, kann bis max. 1024 PByte Dateisystemgröße und 16 TByte Dateigröße verwalten. Ext4 arbeitet mit 48Bit Blocknummern und einer Standard Blockgröße von 4KByte (248 x 4KByte = 1024 PByte). Ext4 benutzt Extents zur Adressierung, dazu wird ein möglichts zusammenhängender Bereich einer Datei auf zusammenhängende Blöcke der Platte gemappt. Die Blöcke innerhalb einer Datei wird in 32 Bit gezählt, das legt die max. Dateigöße auf (232 x 4KByte) 16 TByte fest.

- unbegrenzte Anzahl von Unterverzeichnissen je Verzeichnis
- 256 Byte Standardgröße je Inode

Ein Ext4 läßt sich nicht als Ext3 mounten.

- Dateisystem Upgrade auf Ext4, die schon existierenden Dateien bleiben im Ext3 Format, die neuen werden im Ext4 Format angelegt, ein Flag im Inode gibt an ob der Inode Blocknummern oder Extents enthält. Es entsteht ein Hybrid aus Ext3 und Ext4.

tune2fs -O extents /dev/[PARTITION]

- ein sauberes Ext4 anlegen, Daten müssen gesichert und dann auf das neu formatierte Laufwerk zurückgespielt werden.

mkfs -t ext4 /dev/[PARTITION]

Wichtig! Das Dateisystem kann nur noch als Ext4 gemoutet werden.

Seitenanfang

NTFS

Kerneltreiber ntfs oder Alternative ntfs-3g

apt-get install ntfs-3g
Parameter Bedeutung
-t ntfs DateiSytemTyp oder ntfs-3g
-r nur lesen
-o ro nur lesen
-o umask={Wert} Zugriffsrechte Datei und Verzeichnis
-o fmask={Wert} Zugriffsrechte Datei
-o dmask={Wert} Zugriffsrechte Verzeichnis
-o uid={USERID} Benutzer
-o gid={GROUPID} Gruppenzugehörigkeit
-o iocharset={NAME} Zeichensatz (utf8,iso8859-1,iso8859-15, u.a.)
-o nls={NAME} Zeichensatz (utf8,iso8859-1,iso8859-15, u.a.)

Beispiele

# /etc/fstab
/dev/sda2 /media/sda2 ntfs user,noauto,gid=users,umask=0007,uft8 0       0
mount -t ntfs -o rw,umask=0277 /dev/sda2 /mnt
-r-x------ 2 root root
mount -t ntfs -o rw,umask=0077 /dev/sda2 /mnt
-rwx------ 2 root root
mount -t ntfs -o rw,umask=0017 /dev/sda2 /mnt
-rwxrw---- 2 root root
mount -t ntfs -o rw,umask=0006 /dev/sda2 /mnt
-rwxrwx--x 2 root root
mount -t ntfs -o gid=users,rw,umask=0017 /dev/sda2 /mnt
-rwxrw---- 2 root users
mount -t ntfs -o uid=nobody,gid=users,rw,umask=0017 /dev/sda2 /mnt
-rwxrw---- 2 nobody users

 

Seitenanfang

Journaled File System (JFS)

JFS2 hat eine max. Dateigröße von 4 PByte und max. Dateisystemgröße von 32 PByte.

 

Seitenanfang

XFS

max. Dateigröße von 8192 PByte und max. Dateisystemgröße von 8192 PByte.

 

Seitenanfang

BtrFS

Pro-Linux BtrFS
Wiki
btrfs - Linux-Dateisystem der Zukunft

- Dateisystem anlegen (Type 83)

# cfdisk /dev/sdb
# mkfs.btrfs -L data /dev/sdb1

- 8GB BTRFS Datenträger nach /data einhängen

# mkdir /data
# mount /dev/sdb1 /data
# df -lh /data/
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
/dev/sdb1       8,0G     56K  7,2G    1% /data

- Dateisystem um 6GB verkleinern (+ vergrößern, max Maximalgröße)

# btrfs filesystem resize -6G /data
Resize '/data' of '-6G'
# df -lh /data/
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
/dev/sdb1       2,0G     56K  1,2G    1% /data

- zweite Partition ins Dateisystem einbinden, Beide Platten bilden dabei ein RAID0

# btrfs device add /dev/sdc1 /data
# df -lh /data

- mit Kompression mounten

# mount -o compress /dev/sdb1 /data

- 512MB große Datei anlegen

# dd if=/dev/zero of=/data/bigfile bs=1M count=512
512+0 Datensätze ein
512+0 Datensätze aus

- Snapshot anfertigen

btrfs subvolume snapshot /data /data/snap1

- Subvolumes anzeigen

# btrfs subvolume list /data/
ID 258 top level 5 path snap1

- Subvolume löschen

btrfs subvolume delete /data/snap1

 

Seitenanfang

Befehle

in der /etc/mke2fs.conf werden die Default-Einstellungen gesetzt, die verwendet werden, wenn man mit mke2fs ein neues Dateisystem erstellt.

Befehl Bedeutung
mke2fs DEVICE Dateisystem erstellen
stat DEVICE Infos zum Dateisystem
dumpe2fs DEVICE Infos zum Dateisystem
tune2fs -c 100 -i 180 100 Mount-Vorgänge oder 180 Tage bis zum automatischen Test
e2fsck DEVICE Dateisystem prüfen
e2fsck -b Superblock Dateisystem Superblock wiederherstellen
mke2fs -n DEVICE gibt Parameter des Dateisystems aus, z.B. auch Position des Superblocks, die man für e2fsck -b Superblock benötigt.
mke2fs -S schreibt Superblöcke und Blockgruppendeskriptoren neu, aber keine Directories, Inodes und Bitmap-Tabellen
tune2fs -o acl Dateisystem mit ACLs mounten
tune2fs -L <Label> DEVICE Dateisystem mit einem LABEL versehn, so kann man die Partition auch mit den Namen mounten.
tune2fs -O dir_index DEVICE Option dir_index setzen, gilt für alle Verzeichnisse die neu angelegt werden.
tune2fs -O ^dir_index DEVICE Option deaktivieren
tune2fs -U <UUID> /dev/sdX2 eingene UUID einen Datenträger zuweisen
e2fsck -fD DEVICE die gesetzte dir_indes Option auf alle anderen Verzeichnisse anwenden. Der e2fsck -fD lauf entfernt ungültige Einträge aus den Verzeichnisdateien und baut die Baumstruktur der Dateinamen wieder auf.
mount -O data=Modus DEVICE Device mit Journal mounten, möglicher Modus ordered, journal oder writeback
e2undel auf Ext2 gelöschte Dateien wiederherstellen
ls -Al /dev/disk/by-uuid UUIDs der Festplatten anzeigen
blkid /dev/sda1 UUID einer Partition anzeigen
blkid UUIDs aller Partitionen anzeigen
   

Performance eines ext3 Dateisystems verbessern

mit der Option dir_index wird eine Tabelle im Dateisystem eingefügt, die eine Liste der Dateien speichert, der Zugriff auf Verzeichnisse mit vielen Dateien wird dadurch beschleunigt. wenn e2fsck -fD nicht ausgeführt wird, wirkt sich die Änderung nur auf neu erstellt Verzeichnisse aus. Mit e2fsck -fD wird die Änderung auf das ganze Dateisystem übertragen, durch ein e2fsck -f wird das Dateisystem einer abschliessenden Überprüfung unterzogen.

tune2fs -O dir_index /dev/sda1
e2fsck -fD /dev/sda1
e2fsck -f /dev/sda1

Ob dir_index schon gesetzt ist wird wie folgt gezeigt.

dumpe2fs /dev/sda2 | grep "Filesystem features"

Journalfunktion

mount -o data=Modus

Möglichkeiten für Modus

Journal auf eine andere Platte legen, ermöglicht bessere Performance da ein gleichzeitiges schreiben der Daten und des Journals möglich ist.

Der erste Befehl legt ein neues externe Journal an, der zweite Befehl bindet das erstellt Journal für die Partition /dev/sda1 ein..

mke2fs -O journal_dev /dev/log
mke2fs -J device=/dev/log /dev/sda1

Ausgabe von dump2fs

Filesystem UUID:	43fc5cd2-957a-443a-b345-c4a3b56f8a13
Filesystem features:	has_journal resize_inode dir_index filetype needs_recovery sparse_super large_file
Filesystem state:	clean
Mount count:		10
Maximum mount count:	26
Last checked:		Sun Feb 10 15:18:08 2008
Check interval:		15552000 (6 months)
Next check after:	Fri Aug  8 16:18:08 2008
Seitenanfang

UUID

- UUIDs der MBR-Partitionen

ls -Al /dev/disk/by-uuid/
lrwxrwxrwx 1 root root 10 Apr 23 15:41 49012907-19ae-423d-838d-5c1999c4ca58 -> ../../sda5
lrwxrwxrwx 1 root root 10 Apr 23 15:41 8cfc0757-8dfa-4a26-8bf0-ac8fb68e7183 -> ../../sda1

- UUIDs der GPT-Partition

ls -Al /dev/disk/by-partuuid

- Zuordnung der UUIDs anzeigen

sudo blkid
/dev/sda5: UUID="49012907-19ae-423d-838d-5c1999c4ca58" TYPE="swap" PARTUUID="28762317-05"
/dev/sda1: UUID="8cfc0757-8dfa-4a26-8bf0-ac8fb68e7183" TYPE="ext4" PARTUUID="28762317-01"

Bei einem MBR partitionierten Datenträger wird die UUID beim Formatieren des Datenträgers angelegt oder neu festgelegt. Bei einem GPT Datenträger ist die UUID in den GPT-Daten abgelegt, diese ändert sich nicht beim formatieren der Partition.

- UUID erzeugen

uuidgen
oder
cat /proc/sys/kernel/random/uuid

- UUID setzen eigene UUID oder zufällige UUID

tune2fs -U <UUID> /dev/sdX2
tune2fs -U random /dev/sdX2

- UUID des Datenträgers löschen

tune2fs -U clear

 

Seitenanfang

gelöschte Dateien wiederherstellen

Ext2 und Ext3 verwalten die Daten in drei verschiedenen Datenstrukturen:

es gibt auch noch Block-Bitmaps, in denen belegt/freie Datenblöcke geführt werden.
In den Verzeichnissen stehen die Namen der dort gespeicherten Dateien, sowie die Inode Nummer. Im Inode sind die Detailinformationen gespeichert:

- Inode einer Datei anzeigen

# ls -lid /tmp/test.txt
866960 -rw-r--r-- 1 root root 9 2009-04-25 17:11 /tmp/test.txt

- Inode Detailinformationen unter Ext2 und Ext3

# debugfs -R 'stat <866960>' /dev/sda2
Inode: 866960   Type: regular    Mode:  0644   Flags: 0x0
Generation: 3834816791    Version: 0x00000000
User:     0   Group:     0   Size: 9
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
ctime: 0x49f3282b -- Sat Apr 25 17:11:39 2009
atime: 0x49f32823 -- Sat Apr 25 17:11:31 2009
mtime: 0x49f3282b -- Sat Apr 25 17:11:39 2009
BLOCKS:
(0):1768145
TOTAL: 1

- Inode Detailinformationen Ext3

ext3grep /dev/sda2 --print --inode 866960

Ext3 aktualisiert bei löschen von Daten die Bitmap, trägt im Inode das Löschdatum ein und entfernt die Blocknummern des Inodes. Durch das entfernen der Blocknummern ist ein Wiederherstellen der Daten nahezu unmöglich.

Jetzt kann man versuchen über das Ext3 Journal die Daten wiederherzustellen. Im Journal werden alle Transaktionen vor dem Ausführen gespeichert und danach als erledigt markiert. Das journal hat eine feste Größe und ist als Rundpuffer ausgelegt, ist es voll wird am Anfang wieder überschrieben. Die Einträge im Journal sind mit aufsteigenden Transaktionsnummern markiert.

- Das Journal wird Standardmäßig mit dem Inode 8 im Superblock referenziert. Ein Hardlink mit dem Namen /journal kann man wie folgt anlegen.

debugfs -wR 'ln <8> journal' /dev/sda2

- alternativ die Größe des Journals anzeigen

ext3grep /dev/sda2 --print --inode 8

- Hardlink vom Journal löschen

debugfs -wR 'rm journal' /dev/sda2

- Datenblöcke anzeigen, die bei der Transaktion 12 ins Journal kopiert wurden.

ext3grep /dev/sda2 --journal-transaction 12

- Damit man nach einer Kopie des Inodes von gelöschten Daten suchen kann, braucht man eine Inode-Nummer. Diese findet man im Verzeichnis, in dem die Datei gespeichert war.

# ls -lid /home
1635201 drwxr-xr-x 4 root root 4096 2009-05-01 23:05 /home
# ext3grep /dev/sda2 --ls --inode 1635201

- die gefundene Inode-Nummer der gelöschten Datei in die Blocknummer des Dateisystems umrechnen, z.B. Blocknummer 4564564 wird errechnet.

ext3grep /dev/sda2 --inode-to-block 1231231

- die Blocknummer jetzt in Journal suchen, es wird z.B. zum Block 4564564 Transaktion 2 und 12 mit der Blocknummer 7897897 gefunden.

ext3grep /dev/sda2 --journal --block 4564564

- den Inhalt des Blocks 7897897 der Transaktion 12 und Inode 1231231 suchen, als Ergebnis erhält man eine Kopie des Inodes 1231231 mit der Nummer des Datenblocks der gelöschten Datei.

ext3grep /dev/sda2 --print --block 7897897 | grep -A12 "Inode 1231231"

automatische Wiederherstellung

- eine Datei automatisch wiederherstellen, diese wird dann im aktuellen Verzeichnis, im Ordner RESTORED_FILES abgelegt. ext3grep am besten auf einer anderen Partition starten auf der auch genügend Speicherplatz zur verfügung steht. Wenn mehrere Inodes der wiederherzustellenden Datei existieren (durch löschen und umbenennen), kann es vorkommen das dabei die falsche Version wiederhergestellt wird.

ext3grep /dev/sda2 --restore-file datei.xxx

- durch die Nutzung des Inodes umgeht man, das eine falsche Version wiederhergestellt wird. Datei wird mit dem Namen inode.xxxxxx im Verzeichnis RESTORED_FILES wiederhergestellt.

ext3grep /dev/sda2 --restore-inode 123456

- einen kompletten Verzeichnisbaum wiederherstellen.

ext3grep /dev/sda2 --restore-all
Seitenanfang

Dateisystem reparieren

- Reparatur Ext3 Dateisystem

fsck.ext3 -v -f -c /dev/sda1

- Remount des root Dateisystems

mount -n -O remount,rw /

 

 

Seitenanfang

Squashfs mounten/bearbeiten

- Squashfs Dateisystem mounten und kopieren

mount -t squashfs -o loop live.squashfs /mnt/squashfs
cp -a /mnt/squashfs /usr/src/squashfs

- chroot Umgebung vorbereiten und wichtige Verzeichnisse des WirtSystems einbinden

mount --bind /dev /usr/src/squashfs/dev
mount --bind /proc /usr/src/squashfs/proc
mount --bind /sys /usr/src/squashfs/sys
ln /etc/resolv.conf /usr/src/squashfs/etc
chroot /usr/src/squashfs

- nach dem bearbeiten des Squashfs Systems, die Temp Dateien löschen und eine neue Squashfs Datei erstellen.

apt-get clean
rm ~/.bash_history
rm /etc/resolv.conf
umount /usr/src/squashfs/dev
umount /usr/src/squashfs/proc
umount /usr/src/squashfs/sys

mit STRG + D die chroot Umgebung verlassen und eue Datei erstellen

cd /usr/src && mksquashfs squashfs live.squashfs -wildcards -e boot/vmlinuz-* boot/initrd.img-*

 

 

Seitenanfang

sonstiges