Unter itunes (iphone) oder auch dem Windows Media Center (mce) kann es vorkommen, dass manche Alben als Alben angezeigt werden, andere jedoch sind gesplittet, d.h. für jeden Track wird ein eigenes Album erstellt (mit nur diesem Track drin), was natürlich sehr suboptimal ist. Continue reading iTunes Album gesplittet
Autor: tech-island.com
DSH auf CentOS installieren
[http://www.netfort.gr.jp/~dancer/software/dsh.html.en|DSH] (Dancer’s shell) ist ein exzellenter weg um Shell Kommandos auf verschiedenen Linux-Systemen gleichzeitig abzusetzen.
Bevor es jedoch los geht braucht es unter CentOS ein wenig "Handarbeit".
Zuerst muss man compiler, make, usw. installieren, dann erst [http://www.netfort.gr.jp/~dancer/software/downloads/libdshconfig-0.20.9.tar.gz|libdshconfig] kompilieren und dann [http://www.netfort.gr.jp/~dancer/software/downloads/dsh-0.25.9.tar.gz|dsh] selbst.
Zum Schluss muss man noch einen neuen library pfad hinzufügen:
yum install gcc make cpp gcc-c++ wget wget <a href="http://www.netfort.gr.jp/~dancer/software/downloads/libdshconfig-0.20.9.tar.gz" target="blank">http://www.netfort.gr.jp/~dancer/software/downloads/libdshconfig-0.20.9.tar.gz</a> wget <a href="http://www.netfort.gr.jp/~dancer/software/downloads/dsh-0.25.9.tar.gz" target="blank">http://www.netfort.gr.jp/~dancer/software/downloads/dsh-0.25.9.tar.gz</a> tar -xvzf libdshconfig-0.20.9.tar.gz cd libdshconfig-0.20.9 ./configure make install tar -xvzf dsh-0.25.9.tar.gz cd ../dsh-0.25.9/ ./configure make install echo "/usr/local/lib/" >> /etc/ld.so.conf.d/dsh.conf ldconfig -v |grep dsh |
Soft-RAID nachträglich auf LVM System hinzufügen
Die Situation: Man hat mal ein Linux System mit einer Festplatte und LVM aufgesetzt und möchte jetzt durch das hinzufügen einer zweiten Platte ein soft-raid darauf machen, ohne das System neu installieren zu müssen. – Und mit den richtigen Handgriffen geht das ganz einfach! 😉
[stextbox id=“note“ caption=“Mehr Platz gefällig?“]Meistens ist eine nachträglich hinzugefügte Platte grösser als die erste. – Möchte man dies gerade nutzen um mehr Platz zu bekommen kann man einfach zwei grosse Platten einbauen und nach der RAID-Migration der zweiten Platte, die erste auch noch ersetzen.
Die dazu nötigen Schritte werden an unten an passender Stelle beschrieben.[/stextbox]
Situation
Wir gehen davon aus, dass das system zwei Partitionen hat:
/dev/sda1 (100MB): /boot
/dev/sda2 (rest) : LVM
(bei mehr partionen die Schritte einfach entsprechend für alle wiederholen)
Migration
Zuerst mal wird das System herunter gefahren und die zweite Festplatte eingebaut.
Dann wieder hochfahren und die zweite Platte so formatiert, dass die Partitionen mindestens so gross sind wie die bisherigen (dürfen auch grösser sein, wenn es Sinn macht (z.B. beim LVM) und man evtl. vorhat später die kleinere Platte auch durch eine grössere zu ersetzen.
Nun migrieren wir /boot; dies ist besonders einfach, da /boot im laufenden Betrieb problemlos unmounted werden kann:
umount /boot mdadm --create /dev/md1 --level=1 --raid-disks=2 /dev/sda1 missing |
Nun muss gewartet werden bis
cat /proc/mdstat |
beide Partitionen als synchron anzeigt. Danach wird die alte Partition erstmal wieder entfernt:
mdadm --manage /dev/md1 --fail /dev/sda1 mdadm --manage /dev/md1 --remove /dev/sda1 mdadm --zero-superblock /dev/sda1 |
Wir haben hier zuerst ein sog. "degraded" RAID-Array mit der bisherigen Partition erstellt.
Nun ändern wir in: /etc/fstab den Eintrag für boot wie folgt um:
/dev/md1 /boot ext3 defaults 1 2 |
Jetzt kann /boot wieder gemounted werden:
mount /boot/ |
Nun muss auch noch die: "#boot=" Zeile in: /boot/grub/menu.lst angepasst werden:
#boot=/dev/md1 |
Als nächstes stellen wir sicher, dass grub auf beiden Festplatten installiert ist:
grub grub> device (hd0) /dev/sda grub> root (hd0,0) grub> setup (hd0) grub> device (hd0) /dev/sdb grub> root (hd0,0) grub> setup (hd0) grub> find /grub/stage1 grub> quit |
Jetzt folgt die Migration des LVMs. Dazu erstellen wir wieder ein degraded raid-array, fügen dass als PV den LVM hinzu verschieben dann all die Daten von der alten Partition auf das neue md-drive und können danach das alte PV aus der VG entfernen:
mdadm --create /dev/md2 --level=1 --raid-disks=2 missing /dev/sdb2 pvcreate /dev/md2 vgextend rootvg /dev/md2 pvmove /dev/sda2 /dev/md2 vgreduce rootvg /dev/sda2 pvremove /dev/sda2 |
Zu guter letzt muss jetzt noch ein neues initrd erstellt werden:
mkinitrd -v -f /boot/initrd-$(uname -r).img $(uname -r) |
[stextbox id=“warning“ caption=“Achtung“]Das erstellen des initrd’s ist ganz wichtig und selbst dann, wenn man bereits vorher vom LVM gebootet- und CentOS am laufen hat! – Denn CentOS fügt bei der initialen initrd erstellung jeweils nur die Treiber-Module hinzu, die auch benötigt werden; so fehlt aber der raid-treiber und das System wird nicht booten![/stextbox]
Nun kann man das System neu starten und wenn alles geklappt hat die Partitionen der alten Platte dem neuen RAID-Array hinzufügen:
mdadm --manage /dev/md1 --add /dev/sda1 mdadm --manage /dev/md2 --add /dev/sda2 cat /proc/mdstat |
[stextbox id=“tip“ caption=“Tip“]Will man nun die alte Platte auch gleich mit einer grösseren ersetzen, so kann man diese vor dem obigen Schritt durch eine grössere ersetzen, entsprechend Partitionieren und gleich wie im obigen Schritt einbinden.[/stextbox]
Drupal: Cache manuell löschen
Bei Problemen mit drupal wird es manchmal sogar nötig den Cache manuell in der Datenbank zu löschen.
Dies kann mit folgendem Query gemacht werden:
TRUNCATE TABLE drupal_cache; TRUNCATE TABLE drupal_cache_block; TRUNCATE TABLE drupal_cache_browscap; TRUNCATE TABLE drupal_cache_content; TRUNCATE TABLE drupal_cache_filter; TRUNCATE TABLE drupal_cache_form; TRUNCATE TABLE drupal_cache_menu; TRUNCATE TABLE drupal_cache_page; TRUNCATE TABLE drupal_cache_uc_price; TRUNCATE TABLE drupal_cache_update; TRUNCATE TABLE drupal_cache_views; TRUNCATE TABLE drupal_cache_views_data; DELETE FROM drupal_variable WHERE name="cron_semaphore"; DELETE FROM drupal_variable WHERE name="cron_last"; |
FTP-Server
In diesem Tutorial wollen wir einen „ISP-Fähigen“ FTP-Server aufsetzen, bei dem die Benutzer nicht auf dem System selbst sondern nur virtuell in einer mySQL Datenbank existieren.
Selbstverständlich gehört auch Quota-Support dazu.
Als besonderes Schmankerl werden wir noch SSL hinzufügen um verschlüsseltes FTPS zu realisieren.
Einleitung
Als Software kommt proftd unter einem CentOS System zum Einsatz, die Konfiguration auf anderen Systemen dürfte aber nahezu identisch sein.
Bei den grafischen Frontends ist es häufig so, dass diese nicht wirklich schön sind, man kann aber, besonders bei FTP auch ganz einfach selbst was darum programmieren. Für den start dürfte proftp administrator aber ausreichen.
Installation
[stextbox id=“note“ caption=“Hinweis“]Die Texte: GEHEIMES_PASSWORT, so wie GEHEIMES_USER_PASSWORT müssen natürlich mit deinem Passwort ersetzt werden![/stextbox]
Als erstes installieren wir die benötigen Komponenten (letztere dürfte in den meisten Fällen schon vorhanden sein:
yum install proftd mysql-server openssl |
Nun legen wir noch einen Benutzer und eine Gruppe an, unter dem dann die virtuellen Benutzer laufen:
groupadd -g 10021 ftpusers useradd -c 'Virtual FTP users' -m -d /home/ftp/ -g 10021 -u 10021 -s /bin/false -r vftp |
mySQL/Frontend
Nun muss proftd-administrator auf einem webserver installiert werden. Wie das geht sollte klar sein, wenn nicht einfach der Beschreibung auf der proftpd administrator Webseite folgen. – Dieser Schritt ist optional, im prinzip kann man die user auch direkt in die Tabelle Eintragen, z.B. mit phpmyadmin.Dann führt man folgende SQL Kommandos auf der Datenbank aus:
mysql -u root -p mysql> create database proftpd; mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON proftpd.* TO 'proftpd'@'localhost' IDENTIFIED BY '<GEHEIMES_PASSWORT>'; mysql> FLUSH PRIVILEGES; mysql> use proftpd; CREATE TABLE usertable ( userid text, passwd text, homedir text, shell text, uid int(11) NOT NULL auto_increment, gid int(11) default NULL, count int(11) NOT NULL default '0', lastlogin datetime NOT NULL default '0000-00-00 00:00:00', lastlogout datetime NOT NULL default '0000-00-00 00:00:00', expiration datetime NOT NULL default '0000-00-00 00:00:00', disabled tinyint(4) default '0', det_name tinytext, det_mail tinytext, det_adress tinytext, det_notes tinytext, PRIMARY KEY (uid) ) TYPE=MyISAM; CREATE TABLE grouptable ( groupname text, gid int(11) NOT NULL auto_increment, members text, description tinytext, PRIMARY KEY (gid), UNIQUE KEY gid_2 (gid), KEY gid (gid) ) TYPE=MyISAM; CREATE TABLE xfer_stat ( userid text, file text, size bigint(20) default '0', address_full text, address_ip text, command text, timespent text, time text, cmd text, dunno text ) TYPE=MyISAM; CREATE TABLE `ftpquotalimits` ( `name` varchar(30) NOT NULL default '', `quota_type` enum('user','group','class','all') NOT NULL default 'user', `per_session` enum('false','true') NOT NULL default 'false', `limit_type` enum('soft','hard') NOT NULL default 'hard', `bytes_in_avail` float NOT NULL default '0', `bytes_out_avail` float NOT NULL default '0', `bytes_xfer_avail` float NOT NULL default '0', `files_in_avail` int(10) unsigned NOT NULL default '0', `files_out_avail` int(10) unsigned NOT NULL default '0', `files_xfer_avail` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`name`) ) TYPE=MyISAM; CREATE TABLE `ftpquotatallies` ( `name` varchar(30) NOT NULL default '', `quota_type` enum('user','group','class','all') NOT NULL default 'user', `bytes_in_used` float NOT NULL default '0', `bytes_out_used` float NOT NULL default '0', `bytes_xfer_used` float NOT NULL default '0', `files_in_used` int(10) unsigned NOT NULL default '0', `files_out_used` int(10) unsigned NOT NULL default '0', `files_xfer_used` int(10) unsigned NOT NULL default '0' ) TYPE=MyISAM; INSERT INTO grouptable (gid, groupname, description) VALUES (10021, "users", "Ordinary users"); INSERT INTO usertable (userid, passwd, homedir, shell, uid, gid ) VALUES (10021, <GEHEIMES_USER_PASSWORT>, "/home/ftp/vftp", "/bin/false", 10021, 10021); quit |
proFTPd
Nun konfigurieren wir die Datei /etc/proftpd.conf wie folgt:
### Load Modules LoadModule mod_sql.c LoadModule mod_sql_mysql.c LoadModule mod_quotatab.c LoadModule mod_quotatab_sql.c ### Global Options ServerName "FTP Server" ServerIdent on "example.org FTP service ready." ServerType standalone DefaultServer on Port 21 User ftp Group ftp MaxInstances 30 # To prevent DoS attacks, set the maximum number of child processes to 30 DeferWelcome off MasqueradeAddress PUBLIC_IP_DES_SERVERS PassivePorts 60000 60010 MultilineRFC2228 on # For compatibility with certain clients TimeoutNoTransfer 600 TimeoutStalled 600 TimeoutIdle 1200 DisplayLogin /home/ftp/welcome.msg DisplayChdir .message #ListOptions "-lh" ListOptions "+a" DenyFilter \*.*/ #PathDenyFilter "\\.ftp)|\\.ht)[a-z]+$" PathDenyFilter "(^|/)[-.]" ### FTPS/SSL connections <IfModule mod_tls.c> TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol SSLv3 TLSv1 TLSRequired off # Are clients required to use FTP over TLS when talking to this server? # Server's certificate TLSRSACertificateFile /usr/local/share/ssl/default.crt TLSRSACertificateKeyFile /usr/local/share/ssl/default.key TLSCACertificateFile /usr/local/share/ssl/default.ca # CA the server trusts TLSVerifyClient off # Authenticate clients that want to use FTP over TLS? # Allow SSL/TLS renegotiations when the client requests them, but # do not force the renegotations. Some clients do not support # SSL/TLS renegotiations; when mod_tls forces a renegotiation, these # clients will close the data connection, or there will be a timeout # on an idle data connection. TLSRenegotiate none TLSOptions NoCertRequest </IfModule> ### User Options DefaultRoot ~ ftpusers # chroot for members of the users group # Umask 022 prevents new files and dirs (second parm) from being group and world writable. Umask 027 027 AllowOverwrite on # Normally, we want files to be overwriteable. # Only members of the users grou are allowd to login <Limit LOGIN> DenyGroup !ftpusers </Limit> # Deny root-login, but do not persist of a valid shell as we use virtual users <Global> RootLogin off RequireValidShell off </Global> ### Authentication #PersistentPasswd off # Uncomment this if you are using NIS or LDAP to retrieve passwords AuthOrder mod_sql.c SQLAuthTypes Backend SQLConnectInfo proftpd@localhost proftpd secret SQLUserInfo usertable userid passwd uid gid homedir shell SQLGroupInfo grouptable groupname gid members SQLUserWhereClause "disabled=0 and (NOW()<=expiration or expiration=-1 or expiration=0)" # Log the user logging in SQLLog PASS counter SQLNamedQuery counter UPDATE "lastlogin=now(), count=count+1 WHERE userid='%u'" usertable # logout log SQLLog EXIT time_logout SQLNamedQuery time_logout UPDATE "lastlogout=now() WHERE userid='%u'" usertable # display last login time when PASS command is given SQLNamedQuery login_time SELECT "lastlogin from usertable where userid='%u'" SQLShowInfo PASS "230" "Last login was: %{login_time}" # xfer Log in mysql SQLLog RETR,STOR transfer1 SQLNamedQuery transfer1 INSERT "'%u', '%f', '%b', '%h', '%a', '%m', '%T', now(), 'c', NULL" xfer_stat SQLLOG ERR_RETR,ERR_STOR transfer2 SQLNamedQuery transfer2 INSERT "'%u', '%f', '%b', '%h', '%a', '%m', '%T', now(), 'i', NULL" xfer_stat ### User quotas QuotaEngine on QuotaDirectoryTally on QuotaDisplayUnits Mb QuotaShowQuotas on SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = '%{0}' AND quota_type = '%{1}'" SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'" SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" ftpquotatallies SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies QuotaLimitTable sql:/get-quota-limit QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally ### Logging # Define logging formats LogFormat default "%h %l %u %t \"%r\" %s %b" LogFormat auth "%v [%P] %h %t \"%r\" %s" LogFormat write "%h %l %u %t \"%r\" %s %b" # alle logins ExtendedLog /var/log/proftpd/ftp_auth.log AUTH auth # file/dir access ExtendedLog /var/log/proftpd/ftp_access.log WRITE,READ write # paranoid log (large logfiles!) ExtendedLog /var/log/proftpd/ftp.log ALL default ### Directories <Directory /srv/ftp/upload> AllowOverwrite off <Limit DELE RMD> DenyAll </Limit> </Directory> |
/etc/ssl/default.key
/etc/ssl/default.crt
abspeichern.
Wie man solche Zertifikate erstellt wird im Workshop: ((Mit OpenVPN zwei Netzwerke verbinden|Mit OpenVPN zwei Netzwerke verbinden)) im Abschnitt: „Zertifizierungsstelle einrichten“ behandelt.
Falls du dies nicht möchtest, lösche einfach den SSL-Teil aus der Konfiguration heraus.[/stextbox]
Abschliessender Test
[stextbox id=“note“ caption=“Hinweis: Firewall“]Falls du Probleme beim Zugriff auf den FTP-Server hast: Vor allem bei „passive FTP“ muss man das iptables-Modul: nf_conntrack_ftp verwenden!
Bei Red Hat Systmen kannst du das unter: /etc/sysconfig/iptables-config Eintragen:
IPTABLES_MODULES="nf_conntrack_ftp" |
[/stextbox]
Starte nun den proftpd Server:
/etc/init.d/proftd start |
Nun kannst di dich mit dem FTP verbinden:
ftp localhost Connected to localhost (127.0.0.1). 220 ProFTPD 1.3.3c Server (CentOS) [78.46.19.250] Name (localhost:root): vftp 331 Password required for vftp Password: <GEHEIMES_USER_PASSWORT> ftp> dir |
SSL-Version testen
Das verwenden einer SSL-Version kleiner als SSLv3 wird heutzutage oft als Sicherheitsrisiko angesehen und ein administrator würde manchmal gerne prüfen ob seine server per SSLv2 noch erreichbar sind.
Dies geht unter Linux relativ einfach mit dem OpenSSL-Kommando:
openssl s_client -connect www.domain.tld:443 -ssl2 |
Kommt dann dabei so was raus wie:
CONNECTED(00000003) 7623:error:1407F0E5:SSL routines:SSL2_WRITE:ssl handshake failure:s2_pkt.c:428: |
Kann davon ausgegangen werden, dass SSLv2 vom server nicht akzeptiert wird.
Script-Pfad ermitteln
Um in einem script den Pfad zum Verzeichnis von dem das Script aufgerufen wird gibt es diese Funktion:
<span class="keys"> ${BASH_VERSINFO[0]} -le 2 </span> && echo 'The BASH_SOURCE array variable is only available for Bash 3.0 and higher!' && exit 1 if [ "${BASH_SOURCE[0]}" != "${0}" ]; then # echo "script ${BASH_SOURCE[0]} is running sourced ..." SCRIPT_PATH="$(cd $(dirname "${BASH_SOURCE[0]}"); pwd -P)" else # echo "script ${0} is NOT running sourced ..." SCRIPT_PATH="$(cd $(dirname "${0}"); pwd -P)" fi |
Falls man nun Beispielsweise ein script in /home/user/bin/test.sh hat und die obige Funktion in diesem Script aufruft zeigt $SCRIPT_PATH immer auf: /home/user/bin, egal ob man dieses Script im bin-Verzeichnis aufruft (./test.sh) oder absolut (/home/user/bin/test.sh).
Dies ist besonders nützlich, wenn man innerhalb des scriptes weitere scripts im selben Verzeichnis wie das script aufruft und dies nicht mit absoluter Pfadangabe machen will (da sich das script-Verzeichnis verschieben könnte).
RAID/LVM nachträglich hinzufügen
Situation
Man hat bereits einen Linux Server aufgesetzt der gut läuft. Nun hat man dem eine zweite Platte hinzugefügt und möchte ein RAID/LVM System daraus machen, aber ohne das aufwändige neu installieren/konfigurieren des Systems.
Dies ist mit etwas know how relativ leicht möglich, indem man zuerst die zweite (unbenutzte) Festplatte entsprechend als sog. "degraded raid1 array" definiert, dann die Files von der ersten Platte rüber kopiert, von dieser bootet und letztendlich diese dann dem RAID wieder dazu fügt.
[stextbox id=“note“ caption=“Hinweis“]Der folgende Artikel zeigt wie es mit einem CentOS System geht; der Vorgang dürfte sich aber auch für andere Systeme nahezu nicht unterscheiden.[/stextbox]
Installieren der Komponenten
Als erstes sollte man in der Kernel-Konfiguration überprüfen ob RAID einkompilliert ist, dies dürfte aber bei fast allen neueren Kernels der Fall sein:
-> Device Drivers -> Multi-device support (RAID and LVM) -> Multiple devices driver support (RAID and LVM) (MD [=y]) -> RAID support (BLK_DEV_MD [=y]) -> RAID-1 (mirroring) mode |
Dann installieren wir mdadm und lvm2:
yum install mdadm lvm2 rsync |
Konfiguration
Vorbereiten der neuen Disk
Nun kann die neue Disk (von der aktuell laufenden sollte man noch die Finger lassen!) mit fdisk gemäss den eigenen wünschen partitioniert werden; in diesem Beispiel haben wir folgende aufteilung:
Device Flags Part Type FS Type Label Size (MB) /dev/sdb1 boot Primary Linux raid autodetect 128 /dev/sdb2 Primary Linux raid autodetect (rest) |
Ist alles erledigt erstellen wir daraus ein degraded array mit den oben definierten Partitionen:
mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb1 mdadm --create /dev/md2 --level=1 --raid-devices=2 missing /dev/sdb2 mdadm --detail --scan >> /etc/mdadm.conf |
Und optional nun noch der LVM drüber:
vgscan vgchange -a y pvcreate /dev/md2 vgcreate rootvg /dev/md2 lvcreate -L1G -nroot_lv rootvg lvcreate -L5G -nusr_lv rootvg lvcreate -L5G -nhome_lv rootvg lvcreate -L7G -nvar_lv rootvg lvcreate -L2G -ntmp_lv rootvg lvcreate -L512M -nswap_lv rootvg |
Darauf können nun die filesysteme erstellt werden:
mke2fs /dev/md1 mke2fs -j /dev/rootvg/root_lv mke2fs -j /dev/rootvg/home_lv mke2fs /dev/rootvg/tmp_lv mke2fs -j /dev/rootvg/usr_lv mke2fs -j /dev/rootvg/var_lv mkswap /dev/rootvg/swap_lv |
Das ganze können wir jetzt mounten…
mkdir -p /mnt/new mount /dev/rootvg/root_lv /mnt/new cd /mnt/new mkdir boot home usr opt var tmp mount /dev/md1 /mnt/new/boot mount /dev/rootvg/usr_lv /mnt/new/usr mount /dev/rootvg/home_lv /mnt/new/home mount /dev/rootvg/tmp_lv /mnt/new/tmp mount /dev/rootvg/var_lv /mnt/new/var chmod 1777 /mnt/new/tmp |
…und die Daten rüber kopieren:
rsync -ahvx / /mnt/new/ rsync -ahv /dev/* /mnt/new/dev/ rsync -ahv /boot/ /mnt/new/boot/ |
Als nächster Schritt muss noch die Datei: /mnt/new/etc/fstab angepasst werden:
# <fs> <mountpoint> <type> <opts> <dump/pass> /dev/md1 /boot ext2 noauto,noatime 1 2 /dev/rootvg/root_lv / ext3 noatime 0 1 /dev/rootvg/swap_lv none swap sw,pri=1 0 0 /dev/rootvg/usr_lv /usr ext3 noatime 1 2 /dev/rootvg/home_lv /home ext3 noatime 1 2 /dev/rootvg/tmp_lv /tmp ext2 noatime 1 2 /dev/rootvg/var_lv /var ext3 noatime 1 2 shm /dev/shm tmpfs nodev,nosuid,noexec 0 |
Als letztes noch die Datei /mnt/new/boot/grub/menu.lst bearbeiten, den ersten (standard) Eintrag nach zuoberst kopieren und "root=/dev/sda2" in: "root=/dev/rootvg/root_lv" ändern.
Dies müsste dann etwa so aussehen:
title CentOS RAID root (hd0,0) kernel /vmlinuz ro root=/dev/rootvg/root_lv |
Testen
Nun gehts ans testen, ob die Maschine vom RAID booten- und LVM Partitionen mounten kann, bevor wir die Daten auf /dev/sda endgültig zerstören. – Bisher haben wir noch gar nichts "zerstört".
Dazu erstellen wir die folgenden Verzeichnisse: /mnt/md1 und /mnt/tmp_lv}:
mkdir -p /mnt/{md1,tmp_lv} |
Und fügen den folgenden Eintrag in /etc/fstab:
/dev/md1 /mnt/md1 ext2 noatime 0 1 /dev/rootvg/tmp_lv /mnt/tmp_lv ext2 noatime 1 2 |
Nun starten wir das System neu und überprüfen ob wir den Verzeichnisinhalt von diesen zwei Verzeichnissen sehen können.
[stextbox id=“warning“ caption=“Wichtig“]Fahre NICHT weiter fort, bevor du diesen Schritt erfolgreich beendet hast![/stextbox]
Editiere nun /boot/grub/menu.lst, kopiere den ersten (standard) Eintrag nach zuoberst und ändere "root=/dev/sda2" in: "root=/dev/rootvg/root_lv".
Dies müsste dann etwa so aussehen:
title CentOS RAID root (hd0,0) kernel /vmlinuz ro root=/dev/rootvg/root_lv |
Starte das System neu.
Migration
Nun migrieren wir die erste Disk.
Erstelle mit fdisk nun genau das selbe layout wie mit /dev/sdb.
Nun aktiveren wir das SWAP erstellen das array und warten bis es fertig ist:
mdadm --add /dev/md1 /dev/sda1 mdadm --add /dev/md2 /dev/sda2 watch -n 1 "cat /proc/mdstat" |
Nun müssen wir nur noch grub auf die beiden Disks kopieren:
grub Probing devices to guess BIOS drives. This may take a long time. grub> root (hd0,0) Filesystem type is ext2fs, partition type 0xfd grub> setup (hd0) Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/e2fs_stage1_5" exists... yes Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 16 sectors are embedded. succeeded Running "install /boot/grub/stage1 (hd0) (hd0)1+16 p (hd0,0)/boot/grub/stage2 /boot grub/menu.lst"... succeeded Done. grub> root (hd1,0) Filesystem type is ext2fs, partition type 0xfd grub> setup (hd1) grub> quit |
Starte nun das System noch ein letztes mal neu, prüfe ob es gut hochkommt und dann mit df -h die Partitionen.
IP Adresse extrahieren
Mail mit attachments senden
Einfache mails kann man von der Linux Shell ganz einfach mittels:
echo "message body" | mail -s "subject" user@example.org |
senden.
Schwieriger wirds bei attachments, da diese jeweils MIME-codiert werden müssen um beim Empfänger richtig angezeigt zu werden. – Zwar könnte man die files mittels mimeencode vor dem senden codieren, einfacher gehts jedoch mit dem Kommandozeilen tool "mutt", welches ggf. noch installiert werden muss:
mutt -s "subject" user.name@example.org -a /pfad/zum/file < /dev/null |
Anstatt /dev/null kann man natürlich auch ne textdatei angeben, die dann als message body eingefügt wird.