Linux: Ext3-Partition verkleinern

Problem

Die Partition [cci]/dev/mapper/vgdata-lvmusic[/cci], gemountet unter [cci]/data/music[/cci] ist zu gross und soll darum verkleinert werden.

Lösung

Zuerst muss das Dateisystem ausgehaengt werden. Online kann nur vergroessert werden.
Aushaengen geht mit
[cc lang="bash"]umount /data/music[/cc]
Falls eine Fehlermeldung (“umount: /data/music: device is busy”) erscheint, sind offenbar noch Dateien auf der entsprechenden Partition geoeffnet. Offene Dateien kann man sich mit
[cc lang="bash"]lsof | grep /data/music[/cc]
anzeigen lassen.

Ist das Dateisystem erst mal ausgehaengt, muss man noch einen Filesystemcheck laufen lassen. Anschliessend kann das Filesystem verkleinert werden:
[cc lang="bash"]# Den File System Check:
e2fsck -f /dev/mapper/vgdata-lvmusic

# Und verkleinern:
resize2fs -p /dev/mapper/vgdata-music 10G[/cc]
Anschliessend sollte das Dateisystem nochmals ueberprueft werden (nochmals e2fsck….)

FERTIG!

(Die Partiton muss natuerlich wieder gemountet werden: [cci lang="bash"]mount /dev/mapper/vgdata-lvmusic /data/music[/cci])

Linux: Filesysteme mit LVM online vergrössern

Problem

Unsere Ausgangslage ist ein Linux Server (hier: SLES10) mit LVM eingerichtet. Die Partitionstabelle schaut so aus:

Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/system-root
                       14G  4.1G  8.9G  32% /
udev                  377M  136K  376M   1% /dev
/dev/sda1              69M  9.6M   56M  15% /boot

Nun haben wir aber ein Platzproblem, die Platte laeuft langsam voll. Zum Glueck haben wir vorausgedacht: auf /dev/sda haben wir noch 5GB ungenutzten Speicherplatz. Diesen wollen wir nun ebenfalls / zuweisen.

Lösung

Hinweis: Auch wenn diese Anleitung mit einem SLES10-System erstellt wurde (sorry, da kann ich auch nix dafuer, die Distributionswahl ist nicht in meiner Entscheidungsgewalt :P ) sollte sie fuer die meisten Linux-Distributionen gueltig sein.

Dann mal los:

Freien Speicherplatz partitionieren
Zuerst muss der freie Speicherplatz als “Linux LVM” partitioniert werden. Die ID fuer diesen Partition Type ist 8e.

Wichtig: Anschliessend muss die Partitionstabelle neu eingelesen werden, sonst ist die neue Partition nicht sichtbar. Der Befehl dazu: partprobe

Physical Volume erstellen und in VG einbinden
Weiter gehts mit ein paar LVM-Befehlen: Zuerst muss in der neuen Partition (hier: /dev/sda5) ein sog. Physical Volume eingerichtet werden:

tteam01:~ # pvcreate /dev/sda5
  Physical volume "/dev/sda5" successfully created

Sodele, fast am Ziel.

Das bestehende Volume vergroessern
Dazu muss die neue Partition zuerst der VG zugewiesen werden.

tteam01:~ # vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  system   1   2   0 wz--n- 14.93G 28.00M
tteam01:~ #
tteam01:~ # vgextend -v system /dev/sda5
    Checking for volume group "system"
    Archiving volume group "system" metadata (seqno 3).
    Adding physical volume '/dev/sda5' to volume group 'system'
    Wiping cache of LVM-capable devices
    Volume group "system" will be extended by 1 new physical volumes
    Creating volume group backup "/etc/lvm/backup/system" (seqno 4).
  Volume group "system" successfully extended
tteam01:~ #
tteam01:~ # vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  system   2   2   0 wz--n- 19.92G 5.02G

Und nun muss noch das LV vergroessert werden. Wir vergroessern das LV hier einfach auf die maximale Groesse:

tteam01:~ # lvextend -v -l +100%FREE /dev/system/root
    Finding volume group system
    Archiving volume group "system" metadata (seqno 10).
  Extending logical volume root to 18.82 GB
    Creating volume group backup "/etc/lvm/backup/system" (seqno 11).
    Found volume group "system"
    Found volume group "system"
    Loading system-root table
    Suspending system-root (253:0)
    Found volume group "system"
    Resuming system-root (253:0)
  Logical volume root successfully resized
tteam01:~ # vgs
 VG     #PV #LV #SN Attr   VSize  VFree
 system   2   2   0 wz--n- 19.92G    0

Aha, aus unsern ~15GB sind ~20GB geworden. War einfach, nicht? Aber wir sind noch nicht ganz fertig!

Die bestehende Partition vergroessern
Die Root-Partition ist nun aber immer noch auf der alten Groesse, wir haben ja nur das LV vergroessert. Auch das ist kein Problem:

tteam01:~ # ext2online -d /dev/mapper/system-root
[... viel viel Text ...]
tteam01:~ # df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/system-root
                       19G  4.1G   14G  23% /
udev                  377M  136K  376M   1% /dev
/dev/sda1              69M  9.6M   56M  15% /boot

Das wars! Cool, nicht?

Howto: Disk-Images erstellen unter Linux

Aus aktuellem Anlass: Wie erstelle ich von meiner Disk ein (komrpimiertes) Image?

Update: Anstatt mit dd lässt sich das auch mit Umleitungen machen! Siehe Variante 2.

Ausgangslage:

Angenommen ich will meine /boot-Partition sichern, bzw ein Image davon erstellen.
[cc lang="bash"](14:14)mhutter@ganymede:~$
df -h
Filesystem            Size  Used Avail Use% Mounted on
*schnipp*
/dev/md0              221M   31M  179M  15% /boot[/cc]
Hinweis: Die meisten dd-Befehle müssen mit Root-Rechten ausgeführt werden.

Variante 1: Ohne Komprimierung

(NICHT empfohlen)
[cc lang="bash"](14:21)root@ganymede:~#
dd if=/dev/md0 of=/backup/boot.img bs=4M
58+1 records in
58+1 records out
246611968 bytes (247 MB) copied, 0.366272 s, 673 MB/s
(14:22)root@ganymede:~#
ls -lah /backup
total 236M
-rw-r–r– 1 root root 236M 2009-10-30 14:22 boot.img[/cc]
Das ging zwar sehr schnell (0,3sek), aber das Image ist so gross wie die ganze Partition! Klar kann man nachträglich noch gzippen oder so, aber ich bevorzuge

Variante 2: Direkt komprimieren

(empfohlen!)
[cc lang="bash"](14:24)root@ganymede:~#
dd if=/dev/md0 | gzip -c > /backup/boot.img.gz
481664+0 records in
481664+0 records out
246611968 bytes (247 MB) copied, 3.52991 s, 69.9 MB/s
# NACHTRAG! Das geht auch einfacher!
# Das Ergebnis ist genau dasselbe:
gzip -c < /dev/md0 > /backup/boot.img.gz
# Ende Nachtrag
(14:25)root@ganymede:~#
ls -lah /backup
total 29M
-rw-r–r– 1 root root 29M 2009-10-30 14:25 boot.img.gz[/cc]
Das hat jetzt zwar rund 10mal länger gedauert, aber siehe da: Das Image ist nur noch 29MB gross! Win!

Zusatzinfo

Images entpacken und mounten

Das Entpacken klappt einfach mit [cci]gunzip boot.img.gz[/cci] Und so wird nachher gemountet:
[cc lang="bash"]mount -o loop /backup/boot.img /mnt/boot/
# Manchmal muss man auch den Dateisystemtyp angeben:
mount -o loop -t ext2 /backup/boot.img /mnt/boot/[/cc]

SVN: Revisionen rückgängig machen

Wenn man so rumbastelt wie ich, kann es schon mal vorkommen dass man Sachen eincheckt, die man dann später wieder bereut.

Um nun eine gesamte Revision rückgängig zu machen, ist wie folgt vorzugehen (Mal angenommen, ich will r13 rückgängig machen):

$ svn merge -c -13 http://example.com/repo/trunk
# Dadurch wird das Changeset von r13 rückwärts angewendet
$
$ svn commit -m 'Undoing changes commited in r13'

Eh voila!

Gefunden in den Common Use-Cases im SVN-Book

Linux/Unix: Ordner rekursiv durchsuchen und Files löschen

[cc lang="bash"]find . -name .svn -type d -exec rm -r “{}” \;[/cc]

Auszug aus man find:

-exec utility [argument ...] ;
True if the program named utility returns a zero value as its exit status. Optional arguments may be passed to the utility. The expression must be terminated by a semicolon (``;''). If you invoke find from a shell you may need to quote the semicolon if the shell would otherwise treat it as a control operator. If the string ``{}'' appears anywhere in the utility name or the arguments it is replaced by the pathname of the current file. Utility will be executed from the directory from which find was executed. Utility and arguments are not subject to the further expansion of shell patterns and constructs.