Posts tagged HowTo
Linux: Ext3-Partition verkleinern
Dec 4th
Problem
Die Partition /dev/mapper/vgdata-lvmusic, gemountet unter /data/music ist zu gross und soll darum verkleinert werden.
Lösung
Zuerst muss das Dateisystem ausgehaengt werden. Online kann nur vergroessert werden.
Aushaengen geht mit
1 | umount /data/music |
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
1 | lsof | grep /data/music |
anzeigen lassen.
Ist das Dateisystem erst mal ausgehaengt, muss man noch einen Filesystemcheck laufen lassen. Anschliessend kann das Filesystem verkleinert werden:
1 2 3 4 5 | # Den File System Check: e2fsck -f /dev/mapper/vgdata-lvmusic # Und verkleinern: resize2fs -p /dev/mapper/vgdata-music 10G |
Anschliessend sollte das Dateisystem nochmals ueberprueft werden (nochmals e2fsck….)
FERTIG!
(Die Partiton muss natuerlich wieder gemountet werden: mount /dev/mapper/vgdata-lvmusic /data/music)
Linux: Filesysteme mit LVM online vergrössern
Dec 1st
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
1 | /dev/sda |
haben wir noch 5GB ungenutzten Speicherplatz. Diesen wollen wir nun ebenfalls
1 | / |
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
) 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:
1 | partprobe |
Physical Volume erstellen und in VG einbinden
Weiter gehts mit ein paar LVM-Befehlen: Zuerst muss in der neuen Partition (hier:
1 | /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
Oct 30th
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.
1 2 3 4 5 | (14:14)mhutter@ganymede:~$ df -h Filesystem Size Used Avail Use% Mounted on *schnipp* /dev/md0 221M 31M 179M 15% /boot |
Hinweis: Die meisten dd-Befehle müssen mit Root-Rechten ausgeführt werden.
Variante 1: Ohne Komprimierung
(NICHT empfohlen)
1 2 3 4 5 6 7 8 9 | (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 |
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!)
1 2 3 4 5 6 7 8 9 10 11 12 13 | (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 |
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 gunzip boot.img.gz Und so wird nachher gemountet:
1 2 3 | 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/ |
Symfony HowTo: Fileupload mit sfWidgetFormInputFileEditable
Oct 12th

Für Formulare mit Dateiupload bietet Symfony ja das praktische Widget sfWidgetFormInputFileEditable an. Besagtes Widget (und der dazugehörige Validator sfValidatorFile) überprüft die Datei, speichert sie am angegebenen Ort mit einem einmaligen Dateinamen, und hinterlegt diesen in der Datenbank.
Zuerst also das Widget anlegen:
1 2 3 4 5 6 7 8 | // lib/form/doctrine/DeinForm.class.php $this->widgetSchema['img_normal'] = new sfWidgetFormInputFileEditable(array( 'label' => 'Mitgliederportrait', 'file_src' => '/uploads/mitglieder/'.$this->getObject()->getImgNormal(), 'is_image' => true, 'edit_mode' => !$this->isNew(), 'template' => '%file% %input% %delete% %delete_label%' )); |
file_src und template werden für die Anzeige im Formular benötigt. Der in file_src definierte Pfad wird dann zur Anzeige im Browser verwendet.
Der Rest sollte eigentlich selbsterklärend sein.
Als Nächstes ist der Validator dran:
1 2 3 4 5 | $this->validatorSchema['img_normal'] = new sfValidatorFile(array( 'required' => false, 'path' => sfConfig::get('sf_upload_dir').'/mitglieder', 'mime_categories' => 'web_images' )); |
Und für die Option, die bestehende Datei zu löschen:
1 | $this->validatorSchema['img_normal_delete'] = new sfValidatorPass(); |
Soweit, sogut.
Nun haben wir aber noch ein Problem. Wir können zwar Dateien hochladen, die werden von Symfony auch schön brav am richtigen Ort abgelegt, und in der DB sind immer die richtigen Dateinamen. ABER: Mit der Zeit werdet ihr feststellen, dass sich im angegebenen Uploadordner (hier: /uploads/mitglieder/) jede menge Dateileichen ansammeln. Symfony löscht zwar den Dateinamen aus der DB, versäumt es aber, veraltete Dateien zu löschen (das trifft auch zu wenn die Datei nur ersetzt wird).
Dazu müssen wir die funktion doSave() unserer Formularklasse anpassen:
1 2 3 4 5 6 7 8 9 10 11 | // lib/form/doctrine/DeinForm.class.php public function doSave($con = null) { if ($this->getValue('img_normal') || $this->getValue('img_normal_delete')) { $p = sfConfig::get('sf_upload_dir').'/mitglieder/'.$this->getObject()->getImgNormal(); if (file_exists($p)) unlink($p); } return parent::doSave($con); } |
Eh Voila!
SVN: Revisionen rückgängig machen
Aug 9th
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):
1 2 3 4 | $ 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
Neuestes Gequatsche hier