linux
Swap unter Linux
Swap war ja schon öfter ein Thema im Blog. Irgendwie verwunderlich, dass das bei den heutigen Speichermassen noch immer Thema ist.
Aber weil es kürzlich im Linux Magazin war:
Find Out What Is Using Your Swap
Mount
Mach.
Hab ich schon.
Machs rückgängig!
Geht nicht, ist nichts gemacht.
Mach.
Hab ich schon.
root@nas:~# mount -a mount: /dev/md127 is already mounted or /data busy root@nas:~# umount /data umount: /data: not mounted root@nas:~# mount /data mount: /dev/md127 is already mounted or /data busy
Wird ja nichts damit zu tun haben?
[ 44.106137] sd 2:0:0:0: [sdc] Media Changed [ 44.110342] sd 2:0:0:0: [sdc] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 44.117621] sd 2:0:0:0: [sdc] Sense Key : Unit Attention [current] [ 44.124023] Info fld=0x0 [ 44.126570] sd 2:0:0:0: [sdc] Add. Sense: Not ready to ready change, medium may have changed [ 44.135167] sd 2:0:0:0: [sdc] CDB: Read(10): 28 00 00 30 00 20 00 00 08 00 [ 44.142197] end_request: I/O error, dev sdc, sector 3145760 [ 44.147806] Buffer I/O error on device sdc1, logical block 393216 [ 44.551986] EXT2-fs (sdc1): warning: mounting unchecked fs, running e2fsck is recommended
ext4 Filesystem Features
Ein Filesystem lässt sich nicht mounten, obwohl es gerade frisch erstellt wurde.
dmesg liefert diese Ausgabe:
EXT4-fs (sdX): couldn't mount RDWR because of unsupported optional features (400)
Ursache dahinter ist, das die File System Tools neuer sind wie der verwendete Kernel. Ganz sauber lässt sich das nur lösen, wenn man zusammenpassende Versionen verwendet.
Oder etwas einfacher, indem man das Feature das der Kernel nicht kennt vom File System entfernt.
tune2fs -O ^metadata_csum /dev/sdX
Oder gleich beim Erstellen weglässt
mke2fs /dev/sdX -O ^metadata_csum
Quelle Stackexchange
Definition der File System Features
Details zu Ext4 Metadata Checksums
Zu welchem Paket gehört eine Datei
Wie finde ich schnell raus, zu welchem Paket eine Datei gehört?
dpkg -S $(which dig)
Ubuntu 18.10 Cosmic Cuttlefish
Ubuntu 18.10 Cosmic Cuttlefish und die IP Adresse
Ubuntu merkt sich einen DHCP Lease. Auch wenn sich die MAC Adresse (nach dem Klonen einer VM) geändert hat, bestehen die Instanzen darauf die gleiche IP Adresse zu benutzen. Was soll das denn?
Versuch den Lease zu löschen mit „> /var/lib/dhcp/dhclient.leases“. File ist leer, auf beiden Instanzen. Reboot. Beide Instanzen mit anderer MAC Adresse… wieder die gleiche IP.
Alternativ auf fixe IP Adresse umstellen:
/etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by # the datasource. Changes to it will not persist across an instance. # To disable cloud-init's network configuration capabilities, write a file # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following: # network: {config: disabled} network: ethernets: enp0s3: addresses: [10.0.0.151/24] gateway4: 10.0.0.138 nameservers: addresses: [10.0.0.110] dhcp4: true version: 2
netplan apply
Ubuntu 18.10 Cosmic Cuttlefish
Ubuntu 18.10 Cosmic Cuttlefish und die Hostname Umbenennung
Eben das neue Ubuntu aufgesetzt. In einer Virtual Box. Aber eigentlich brauch ich gleich zwei solche Maschinen. Also was liegt näher als die VM zu klonen. Geht ja einfach, sogar eine neue MAC Adresse wird generiert. Jetzt noch schnell den zweiten Server umbenannt in /etc/hostname -> reboot -> hostname ist wieder der von Maschine 1.
Suchen, googlen, setzen mit hostname command. Reboot. Und immer wieder zurück auf dem alten Hostname. Was ist da los Ubuntu?
Es finden sich erste Hinweise dass das an cloud-init liegt. Was macht das mit meinem hostname, bitteschön? Auch DHCP wird nicht frisch geholt, aber das ist eine andere Geschichte…
/var/lib/cloud/instances/3f1ebbef-73c0-49db-9207-fde1dce2b8f4/cloud-config.txt
Exakt hier kann man den hostnamen ändern. Reboot und es wurde übernommen!
Update: Einen Reboot später -> wieder der alte Hostname!
Update: Um Ubuntu zu klonen und umzubenennen muss man diesen cloud configuration service abändern:
/etc/cloud/cloud.cfg
# This will cause the set+update hostname module to not operate (if true) preserve_hostname: true
RHEL7 X11Forward
Wenn auf einem frischen RHEL7 (oder CentOS) System kein X11 Forwarding funktioniert, dann checken ob das Paket xorg-x11-xauth installiert ist.
Start a not running process via cron
Beispielcode zum Starten eines Prozesses, wenn diese nicht mehr Läuft. Direkt zur Verwendung in Cron.
#!/bin/bash PROG="apache" ps -ww aux | grep -v grep | grep $PROG >/dev/null 2>&1 if [[ $? -eq 0 ]]; then echo "$PROG found" else echo "$PROG not found" # hier restart einfügen fi
Achtung: Das Script einfach parametrisierbar zu machen via $1 statt $PROG funktioniert nicht, da $1 auch wieder von PS gefunden wird. Es wird daher immer der $PROG found Zweig durchlaufen!
Zitat des Tages
Trying to optimize a system that’s already working correctly is often a waste of time.
From String to Array of Strings in Bash
Definition eines String:
STRING="A"
Definition eines Array:
STRING[0]="A" STRING[1]="B"
oder
STRING="A" STRING[1]="B"
Das heißt, nur mit STRING=“A“ kann noch nicht unterschieden werden, ob es nur ein String ist, oder ein Array. D.h. man kann eine bestehende Definition einfach weiterverwenden. Und auch, diese bei Bedarf einfach um ein zweites Feld erweitern.
Wie aber muss der Code aussehen, damit er von Haus aus mit der Erweiterung umgehen kann?
Feststellen der Anzahl der Elemente im Array
${#STRING[*]}
COUNT=0 while [[ ${COUNT} -lt ${#STRING[*]} ]]; do echo ${STRING[$COUNT]}; COUNT=$((COUNT+1)); done
Output für
unset STRING
(kein Output)
Output für
STRING="a" a
Output für
STRING="a" STRING[1]="b" a b
Voraussetzungen: Elemente im Array von 0 weg zählend durchnummerieren. Das erleichtert das durchlaufen einer Zählschleife ungemein!