Es ist wohl jedem Linux-Admin schon einmal passiert, dass man eine Datei versehentlich gelöscht hat. Mit entsprechenden Recovery-Tools lässt sich diese eventuell wiederherstellen, ob und wie gut das funktioniert ist allerdings die Frage. Allerdings kann man sich diesen Aufwand mit etwas Glück sparen. Wenn nämlich ein Prozess noch einen offenen File Descriptor für diese Datei hat, ist darüber noch ein Zugriff auf die Datei möglich.
Artikel vollständig lesen »Artikel in Kategorie "Betriebssysteme"
Dienstag, 3. Juni 2014
Partitionstabelle kopieren mit dd
Manchmal benötigt man auf zwei Festplatten die selbe Partitionierung, wobei es dann meist auch wichtig ist, dass diese zu 100% übereinstimmen. Da ist es naheliegend, die Partitionstabelle von der einen auf die andere Festplatte zu kopieren. Unter Linux geht dies mittels dd sehr leicht:
# Partitionstabelle auf Festplatte sdc anlegen
root@linux:~$parted /dev/sdc
(parted) mklabel msdos
Nun werden die Datenblöcke, in denen die Partitionstabelle gespeichert ist, von der Festplatte sdb ausgelesen, in eine temporäre Datei gespeichert und auf Festplatte sdc geschrieben.
dd if=/dev/sdb of=/tmp/partitiontable-sdb.bin bs=1 skip=446 count=64
dd if=/tmp/partitiontable-sdb.bin of=/dev/sdc bs=1 seek=446 count=64
Anschließend sind die Partitionstabellen auf beiden Festplatten absolut identisch.
Hinweis:
Mit den genannten Befehlen wird ausschließlich die Partitionstabelle kopiert, ohne Bootrecord. Soll dieser ebenfalls kopiert werden, müssen die ersten 446 Bytes ebenfalls kopiert werden, weshalb die Befehle folgendermaßen lauten müssen:
dd if=/dev/sdb of=/tmp/partitiontable-sdb.bin bs=1 count=64
dd if=/tmp/partitiontable-sdb.bin of=/dev/sdc bs=1 count=64
Montag, 27. Mai 2013
cURL funktioniert nicht mit URL-Parametern
Immer wieder passiert es, dass man als Admin auf Probleme stößt, die man an dieser Stelle eigentlich für ausgeschlossen hält, weil einem der auszuführende Befehl viel zu trivial erscheint. Genau so ging es mir, als ich in einer Shell mit cURL einen Webservice abfragen wollte:
curl http://www.example.com?a=1&b=2
Aus unerfindlichen Gründen wurde der Befehl erst nach einem zweiten, zusätzlichen Return abgeschlossen. Der Tipp eines Kollegen brachte mich glücklicherweise auf die Ursache und damit auch auf die Lösung des Problems. In der URL sind mehrere Parameter, jeweils mit einem "&" verknüpft, enthalten. Die Shell interpretiert dieses Zeichen als Ende des davor stehenden Kommandos und führt dieses aus. Der Rest wird dann als neues Kommando interpretiert, das natürlich erst nach einem weiteren Return ausgeführt wird.
Lösen lässt sich dieses Problem, indem man die URL in (doppelte oder einfache) Anführungszeichen setzt oder das "&" mit einem "\" escaped:
# Doppelte Anführungszeichen
curl "http://www.example.com?a=1&b=2"
# Einfache Anführungszeichen
curl 'http://www.example.com?a=1&b=2'
# Escaped
curl http://www.example.com?a=1\&b=2
Dienstag, 5. Juni 2012
GRUB aus einem Live-System heraus installieren
Will man ein Linux-System auf eine andere Hardware übertragen, muss man im Normalfall natürlich auch den Bootloader neu installieren. Eine Vorgehensweise bei Verwendung von GRUB Legacy als Bootloader, die eigentlich immer funktioniert, ist folgende:
- Zuerst das System mit einer Linux basierten Live-CD (z.B.Knoppix) booten.
- Dann eine Konsole öffen und zum Benutzer root wechseln. Dies ist üblicherweise mittels sudo su möglich.
- Als nächstes die entsprechende Partition mounten:
mount /dev/sda1 /mnt - Dann die virtuellen Verzeichnisse /dev, /proc und /sys des Live-Systems in diese einbinden:
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys - Nun kann man die gemountete Partition als Root-Verzeichnis verwenden:
chroot /mnt - Der letzte Schritt ist nun noch die eigentliche Installation von GRUB:
grub-install /dev/sda
Die Bezeichnungen der Festplatten (hier: sda) bzw. Partitionen (hier: sda1) können natürlich gegebenenfalls anders lauten, als in diesem Beispiel.
Mittwoch, 11. Mai 2011
Fehlermeldung auf Linux-Server: error retrieving current directory
Als ich heute auf einem Linux-Webserver nach dem Löschen eines virtuellen Hosts die Apache-Konfiguration mittels /etc/init.d/apache2 reload neu laden wollte, wurde eine Fehlermeldung ausgegeben, die mir bis dato noch nie begegnet war:
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directoryDiese besagt, dass innerhalb des ausgeführte Befehls (hier das Init-Skript von Apache2) das aktuelle Arbeitsverzeichnis nicht ermittelt werden konnte. Allerdings konnte ich mir zuerst nicht erklären, was die Ursache dafür sein konnte. Doch dann stellte ich fest, dass ich mich noch im DocumentRoot des zuvor gelöschten Hosts befand, welches ich im Zuge dessen natürlich ebenfalls gelöscht hatte. Da das Verzeichnis somit gar nicht mehr existiert, kann dieses natürlich auch kein gültiges Arbeitsverzeichnis mehr sein.
Wenn einem diese oder eine ähnliche Fehlermeldung zukünftig begegnen sollte, sollte man also zuerst einmal prüfen, ob das Verzeichnis, in dem man sich gerade befindet, tatsächlich existiert und für das System auch verfügbar ist.