Seagate FreeAgent DockStar Miniserver
Ich war auf der Suche nach einer TimeMachine Backuplösung und wurde von meinem Kollegen auf den Seagate FreeAgent DockStar aufmerksam gemacht.
Inzwischen laufen auf dem System neben APF/TimeMachine auch noch NFS, FTP, unison und rsnapshot.
Das Timemachine Backup unter OSX Lion funktioniert erst wieder mit netatalk 2.2!
Meldung: The network backup disk does not support the required AFP features
Hardware am DockStar
Das Betriebssystem habe ich auf einem USB Stick installiert und die Daten liegen auf einer externen 3,5" USB Platte.
Für das System hab ich einige USB-Sticks getestet, funktioniert hat dann der Delock Nano 4GB.
Als Datenspeicher habe ich mir die Samsung HD204UI 2TB mit einem Externen FANTEC Gehäuse
bestellt.
Erster Start / Firmware-Update verhindern
Es ist absolut wichtig, dass der Dockstar beim ersten Start keine Möglichkeit hat ins Internet zu kommen, da er sich sonst automatisch aktualisiert!
Ich habe bei mir den Router vom Internet getrennt und die IP-Adresse vom DockStar aus dem DHCP-Server gefischt.
ssh root@192.168.178.xxx passwort: stxadmin
Beenden des PogoPlug Service:
killall hbwd
Da der Dienst bei jedem Reboot wieder gestartet wird, muss man ihn in den Startup Scripten noch deaktivieren:
mount -o remount,rw / chmod go+w /dev/null vi /etc/init.d/rcS
Die Zeile "/etc/init.d/hbmgr.sh start" muss auskommentiert werden:
#/etc/init.d/hbmgr.sh start
VI:
Einfügen:[ESC] I
Speichern:[ESC] : wq!
mount -o remount,ro /
Das System kann jetzt neu gestartet und der Router wieder mit dem Internet verbunden werden.
Festplatte Partitionieren
Ich verwende den USB-Stick nur als Startrampe für das System. Die Datenpartition liegt auf der externen USB-Platte.
Auf meinem System ist die USB-Platte /dev/sda und der Boot-Stick /dev/sdb.
Anlegen der Systempartition (3,5 GB)
fdisk /dev/sdb n p 1 [ENTER] +3584M
Anlegen der SWAP Partition (0,5 GB)
n p 2 [ENTER] [ENTER] t 2 82
Abspeichern
w
Anlegen der Datenpartition (2,0 TB) mit passendem Alignment
fdisk -c -u /dev/sda n p 1 [ENTER] [ENTER] w
Die Einteilung des Systems sieht dann bei mit so aus:
fdisk -l Disk /dev/sda: 2000.4 GB, 2000398934016 bytes 81 heads, 63 sectors/track, 765633 cylinders, total 3907029168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0002d170 Device Boot Start End Blocks Id System /dev/sda1 2048 3907029167 1953513560 83 Linux Disk /dev/sdb: 3963 MB, 3963617280 bytes 64 heads, 32 sectors/track, 3780 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xad40ad40 Device Boot Start End Blocks Id System /dev/sdb1 1 3419 3501040 83 Linux /dev/sdb2 3420 3780 369664 82 Linux swap / Solaris
Installation des Debian Systems (Jeff Doozan) auf dem USB-Stick
Zum installieren des Dockstar Debian Systems sind folgende Schritte nötig:
cd /tmp wget http://jeff.doozan.com/debian/dockstar.debian-squeeze.sh chmod +x dockstar.debian-squeeze.sh export PATH=$PATH:/usr/sbin:/sbin ./dockstar.debian-squeeze.sh
Nach der Installation fragt das Install-Script nach einem Reboot, dies ist mit "y" zu bestätigen.
System konfigurieren
Das System steht jetzt unter der IP (siehe DHCP-Server) über SSH erreichbar.
ssh root@192.168.178.xxx passwort: root
root Passwort ändern:
passwd
Hostname ändern:
vi /etc/hostname /etc/init.d/hostname.sh hostname
System updaten:
apt-get update apt-get upgrade
Software Installation...
z.B. Einen NTP Client, Tools fürs das XFS-Filesystem, Dienste für NFS, AFP/TimeMachine...
apt-get install nano mc ntp cron dialog lsof hdparm apt-get install sdparm xfsprogs xfsdump
Automatische Zeitsynchronisation
Der DockStar hat leider keine Hardwareuhr. Somit steht die Uhr nach jedem Neustart auf 01.01.1970 00:00:00.
Zuerst stellt man die richtige Zeitzone ein:
dpkg-reconfigure tzdata 8 (Europe) 6 (Berlin) ntpdate -u 0.de.pool.ntp.org
Datum und Uhrzeit sollten jetzt stimmen.
Fehlt nur noch einen automatischer Abgleich z.B. nach einem Neustart und einmal pro Stunde. Dafür werden die @hourly und @reboot am Ende der crontab eingetragen.
crontab -e @hourly ntpdate -u 0.de.pool.ntp.org ptbtime1.ptb.de ntp.ubuntu.com > /dev/null 2>&1 @reboot ntpdate -u 0.de.pool.ntp.org ptbtime1.ptb.de ntp.ubuntu.com > /dev/null 2>&1
DockStar IP-Adresse festlegen
Bei mir ist die IP fest im DHCP-Server eingestellt.
nano /etc/network/interfaces auto lo eth0 iface lo inet loopback iface eth0 inet dhcp
Alternativ kann man die IP-Adresse auf dem DockStar fest einstellen.
nano /etc/network/interfaces auto lo eth0 iface lo inet loopback iface eth0 inet static address IPADRESSE netmask NETMASK gateway GATEWAY
Datenpartition formatieren und automatisch Mounten
Formatieren der Datenplatte als EXT4 oder XFS:
mkfs.ext4 -L "USB-2TB" /dev/sda1 mkfs.xfs -l size=64m -d agcount=4 -i attr=2,maxpct=5 -f -L "USB-2TB" /dev/sda1
Verzeichniss erstellen in dem später die Daten liegen:
mkdir /mnt/data
Für das automatische Mounten in die fstab eintragen (EXT4 oder XFS):
nano /etc/fstab /dev/sda1 /mnt/data xfs noatime,logbufs=8,allocsize=128m 0 0 /dev/sda1 /mnt/data ext4 noatime,defaults 0 0
anschliessend zum Testen manuell einhängen
mount -a
Boot Probleme mit USB Sticks
Es gibt USB-Sticks die nach einem Kalt-Start für das Booten nicht rechtzeitig zur Verfügung stehen und noch einen reboot benötigen. Um das Problem zu umgehen, kann man das PogoPlug System so erweitern, dass es bei einem angesteckten USB-Stick automatisch neu startet. Um das System wieder als PogoPlug zu starten, zieht man den BootStick vom System ab und startet das System. Da mein System auf sdb liegt sind Abweichungen davon ggf. anzupassen.
Pogoplug:~$ mount -o remount,rw /
vi /etc/init.d/rcS checkusb=`grep sdb /proc/partitions` if [ -n "$checkusb" ]; then /sbin/reboot fi
mount -o remount,ro /
Netconsole
Mit der NetConsole kann man die Ausgabe vom uBoot Bootloader ohne Serial-Kabel ansehen.
Dazu startet man den DockStar im PogoPlug System. Die IP Adressen Server/Desktop sind entsprechend anzupassen.
cd /usr/sbin ./fw_setenv serverip 192.168.178.XXX ./fw_setenv ipaddr 192.168.178.XXX ./fw_setenv if_netconsole 'ping $serverip' ./fw_setenv start_netconsole 'setenv ncip $serverip; setenv bootdelay 10; setenv stdin nc; setenv stdout nc; setenv stderr nc; version;' ./fw_setenv preboot 'run if_netconsole start_netconsole'
Auf dem Desktop kann man dann per NetCat mitlesen:
nc -l -u -p 6666
Die Ausgabe kann dann so aussehen:
U-Boot 2010.09 (Oct 23 2010 - 11:49:22) Marvell-Dockstar/Pogoplug by Jeff Doozan Hit any key to stop autoboot: 0 (Re)start USB... USB: Register 10011 NbrPorts 1 USB EHCI 1.00 scanning bus for devices... 4 USB Device(s) found scanning bus for storage devices... Device NOT ready Request Sense returned 06 28 00 2 Storage Device(s) found Loading file "/rescueme" from usb device 0:1 (usbda1) ** File not found /rescueme reading /rescueme.txt ** Unable to read "/rescueme.txt" from usb 0:1 ** Creating 1 MTD partitions on "nand0": 0x000002500000-0x000010000000 : "mtd=3" UBI: attaching mtd1 to ubi0 UBI: physical eraseblock size: 131072 bytes (128 KiB) UBI: logical eraseblock size: 129024 bytes UBI: smallest flash I/O unit: 2048 UBI: sub-page size: 512 UBI: VID header offset: 512 (aligned 512) UBI: data offset: 2048 UBI: attached mtd1 to ubi0 UBI: MTD device name: "mtd=3" UBI: MTD device size: 219 MiB UBI: number of good PEBs: 1751 UBI: number of bad PEBs: 1 UBI: max. allowed volumes: 128 UBI: wear-leveling threshold: 4096 UBI: number of internal volumes: 1 UBI: number of user volumes: 0 UBI: available PEBs: 1730 UBI: total number of reserved PEBs: 21 UBI: number of PEBs reserved for bad PEB handling: 17 UBI: max/mean erase counter: 1/1 UBIFS error (pid 0): ubifs_get_sb: cannot open "ubi:rootfs", error -19 Error reading superblock on volume 'ubi:rootfs'! Loading file "/boot/uImage" from usb device 0:1 (usbda1) ** File not found /boot/uImage ** Bad partition 1 ** ** Block device usb 2 not supported ** Block device usb 3 not supported Loading file "/boot/uImage" from usb device 0:1 (usbda1) ** File not found /boot/uImage Loading file "/boot/uInitrd" from usb device 0:1 (usbda1) ** File not found /boot/uInitrd Wrong Image Format for bootm command ERROR: can't get kernel image! stopping USB.. ### JFFS2 loading 'uboot-original-mtd0.kwb' to 0x800000 Scanning JFFS2 FS: ........ done. ### JFFS2 load complete: 524288 bytes loaded to 0x800000 ## Starting application at 0x00800200 ... U-Boot 2010.09 (Oct 23 2010 - 11:49:22) Marvell-Dockstar/Pogoplug by Jeff Doozan Hit any key to stop autoboot: 0 (Re)start USB... USB: Register 10011 NbrPorts 1 USB EHCI 1.00 scanning bus for devices... 4 USB Device(s) found scanning bus for storage devices... 2 Storage Device(s) found Loading file "/rescueme" from usb device 0:1 (usbda1) ** File not found /rescueme reading /rescueme.txt ** Unable to read "/rescueme.txt" from usb 0:1 ** Creating 1 MTD partitions on "nand0": 0x000002500000-0x000010000000 : "mtd=3" UBI: attaching mtd1 to ubi0 UBI: physical eraseblock size: 131072 bytes (128 KiB) UBI: logical eraseblock size: 129024 bytes UBI: smallest flash I/O unit: 2048 UBI: sub-page size: 512 UBI: VID header offset: 512 (aligned 512) UBI: data offset: 2048 UBI: attached mtd1 to ubi0 UBI: MTD device name: "mtd=3" UBI: MTD device size: 219 MiB UBI: number of good PEBs: 1751 UBI: number of bad PEBs: 1 UBI: max. allowed volumes: 128 UBI: wear-leveling threshold: 4096 UBI: number of internal volumes: 1 UBI: number of user volumes: 0 UBI: available PEBs: 1730 UBI: total number of reserved PEBs: 21 UBI: number of PEBs reserved for bad PEB handling: 17 UBI: max/mean erase counter: 1/1 UBIFS error (pid 0): ubifs_get_sb: cannot open "ubi:rootfs", error -19 Error reading superblock on volume 'ubi:rootfs'! Loading file "/boot/uImage" from usb device 0:1 (usbda1) ** File not found /boot/uImage Loading file "/boot/uImage" from usb device 1:1 (usbdb1) 1 bytes read Found bootable drive on usb 1:1 Loading file "/boot/uImage" from usb device 1:1 (usbdb1) 1432032 bytes read Loading file "/boot/uInitrd" from usb device 1:1 (usbdb1) 4735007 bytes read ## Booting kernel from Legacy Image at 00800000 ... Image Name: Linux-2.6.32-5-kirkwood Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1431968 Bytes = 1.4 MiB Load Address: 00008000 Entry Point: 00008000 Verifying Checksum ... OK ## Loading init Ramdisk from Legacy Image at 01100000 ... Image Name: initramfs-2.6.32-5-kirkwood Image Type: ARM Linux RAMDisk Image (gzip compressed) Data Size: 4734943 Bytes = 4.5 MiB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Loading Kernel Image ... OK OK Starting kernel ...
Dienst: TimeMachine
Der DockStar eignet sich hervorragend als TimeMachine Backup Server.
Zuerst wird ein User angelegt und anschliessend ein Verzeichnis im dem TimeMachine sich austoben kann.
adduser timemachine mkdir /mnt/data/backup mkdir /mnt/data/backup/TimeMachine chown timemachine:timemachine /mnt/data/backup/TimeMachine
Installation der benötigten Dienste:
apt-get install netatalk avahi-daemon libnss-mdns
Verzeichnisfreigabe verfügbar machen:
nano /etc/netatalk/AppleVolumes.default /mnt/data/backup/TimeMachine TimeMachine cnidscheme:dbd options:usedots,upriv,tm
Zeile in der nsswitch.conf mit "mdns" ergänzen.
nano /etc/nsswitch.conf hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 mdns
afpd.service erstellen:
nano /etc/avahi/services/afpd.service <?xml version="1.0" standalone='no'?><!--*-nxml-*--> <!DOCTYPE service-group SYSTEM “avahi-service.dtd”> <service-group> <name replace-wildcards=”yes”>%h</name> <service> <type>_afpovertcp._tcp</type> <port>548</port> </service> <service> <type>_device-info._tcp</type> <port>0</port> <txt-record>model=Xserve</txt-record> </service> </service-group>
Entweder muss nun noch der netatalk Dienst gestartet werden, oder man startet das System einmal neu.
/etc/init.d/netatalk restart reboot
Jetzt sollte man im Finder unter "Gehe zu" - "Mit Server verbinden..." mit "afp://servername" verbinden können. TimeMachine Username/Passwort von oben.
Das TimeMachine Volume kann nun unter Systemeinstellungen - TimeMachine ausgewählt werden. TimeMachine speichert jetzt seine Backups auf dem DockStar. Es können ohne Probleme mehrere Macs angeschlossen werden.
Dienst: NFS
Die Linux Systeme sowie die Dreambox sollen per NFS ebenfalls Zugriff auf das System bekommen.
apt-get install nfs-kernel-server nfs-common portmap
nano /etc/exports /mnt/data *(rw,async,no_subtree_check,no_root_squash,fsid=0,insecure)
nano /etc/hosts.deny portmap: ALL
nano /etc/hosts.allow portmap: 192.168.178.0/24
Dienst: FTP
Einrichten des FTP Dienstes:
apt-get install vsftpd
nano /etc/vsftpd.conf anonymous_enable=NO local_enable=YES write_enable=YES
Dienst: unison
...
apt-get install unison
Dienst: rsnapshot
...
apt-get install rsnapshot
Dienst: eMail
Der DockStar soll natürlich auch eMails versenden können.
Dafür muss erstmal etwas Software installiert werden. Fragen vom Installer können hier erstmal ignoriert werden.
apt-get install postfix libsasl2-modules bsd-mailx
Anpassung des EMail-Absenders: root:x:0:0:root:/root:/bin/bash ändern in:
nano /etc/passwd root:x:0:0:SRVNAS01 Admin:/root:/bin/bash
Anzupassen sind: myhostname, mydomain/myorigin, relayhost
nano /etc/postfix/main.cf smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no append_dot_mydomain = no readme_directory = no smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache tls_random_source = dev:/dev/urandom myhostname = srvnas01 alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases mydomain = DOMAIN.TLD myorigin = DOMAIN.TLD mydestination = srvnas01, localhost, localhost.localdomain, localhost relayhost = SMTPOUT.DOMAIN.TLD:587 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all smtp_sasl_auth_enable = yes smtp_use_tls = yes smtp_sasl_security_options = noanonymous smtp_sasl_password_maps = hash:/etc/postfix/sasl_password sender_canonical_maps = hash:/etc/postfix/sender_canonical smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination permit
Zugangsdaten des eMail Anbieters:
nano /etc/postfix/sasl_password smtp.mailanbieter.de:587 username:ganzgeheimespasswort
chmod 600 /etc/postfix/sasl_password postmap /etc/postfix/sasl_password /etc/init.d/postfix restart
nano /etc/postfix/sender_canonical timemachine TM@DOMAIN.TLD root SYSTEM@DOMAIN.TLD
postmap /etc/postfix/sender_canonical /etc/init.d/postfix restart
eMail testen:
echo "Test1" |mail -s "TEST" BENUTZER@DOMAIN.TLD
EMail nach Reboot
cronttab -e @reboot echo "System Reboot" |mail -s "SRVNAS01 - System Reboot" BENUTZER@DOMAIN.TLD
Dienst: smartd
Ich möchte über den Gesundheitszustand der USB-Platte informiert werden. Dafür habe ich mir die smartmontools installiert. Testen kann man das mit dem Befehl:apt-get install smartmontools
smartctl -s on -H -d sat,12 /dev/sda smartctl 5.40 2010-07-12 r3124 [armv5tel-unknown-linux-gnueabi] (local build) Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net === START OF ENABLE/DISABLE COMMANDS SECTION === SMART Enabled. === START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED
Jetzt soll das Ganze noch automatisch laufen und bei Problemen eine eMail versenden.
nano /etc/default/smartmontools start_smartd=yes
In der smartd.conf muss ganz oben der DEVICESCAN mit # auskommentiert werden und am Ende die entsprechende Platte eingetragen werden.
nano /etc/smartd.conf /dev/sda -d sat,12 -a -W 5 -s (S/../.././03|L/../../6/04) -m xxxx@domain.tld -M test
Für die Festplatte sda wird jeden Tag um 03:00 Uhr ein Smart Kurz-Test und jeden Samstag um 04:00 Uhr ein Smart Lang-Test durchgeführt. Der Parameter -M test ist nur für eine Testmail und kann nach dem Testen wieder entfernt werden. Zusätzlich gibt es eine Warnung bei Temperaturschwankungen von 5C.
/etc/init.d/smartmontools start Starting S.M.A.R.T. daemon: smartd.
Das System soll zusätzlich einmal die Woche eine Übersicht aller Smart-Parameter per eMail senden
crontab -e @weekly /usr/sbin/smartctl -a -d sat,12 /dev/sda | mail -s "SRVXXXXX: smartd - Protokoll" SERVER@DOMAIN.TLD
Backup: DockStar
Ich möchte natürlich auch ein Backup vom DockStar erstellen lassen. Dafür kopiere ich mir die wichtigesten Dateien einmal am Tag auf die Datenplatte und halte diese 7 Tage vor.
nano /bin/backup.sh #!/bin/sh LOGFILE=/tmp/backup.log rm -f $LOGFILE echo "System Backup erstellen" >> $LOGFILE 2>&1 echo >> $LOGFILE 2>&1 echo "Lösche Backup (aelter als 7 Tage)" >> $LOGFILE 2>&1 rm -f /mnt/data/backup/srvnas01/backup_`date -d "7 days ago" +%Y%m%d`.tgz >> $LOGFILE 2>&1 echo >> $LOGFILE 2>&1 echo "Erstelle Backup" >> $LOGFILE 2>&1 cd / >> $LOGFILE 2>&1 tar cvpzf /mnt/data/backup/srvnas01/backup_`date +%Y%m%d`.tgz /etc /bin/*.sh /home /root /mnt/brandzone.key /var/backups/ /var/spool/ >> $LOGFILE 2>&1 echo >> $LOGFILE 2>&1 cat $LOGFILE | mail -s "SRVNAS01 - Backup" BENUTZER@DOMAIN.TLD
chmod +x /bin/backup.sh
crontab -e @daily /bin/backup.sh > /dev/null 2>&1
Zusätzlich soll einmal pro Woche (Sonntag um 03:15) ein Abbild vom System-Stick erstellt werden.
nano /bin/image.sh #!/bin/sh LOGFILE=/tmp/image.log rm -f $LOGFILE echo "System Image erstellen" >> $LOGFILE 2>&1 echo >> $LOGFILE 2>&1 date >> $LOGFILE 2>&1 dd if=/dev/sdb of=/mnt/data/backup/srvnas01/srvnas01.dd >> $LOGFILE 2>&1 date >> $LOGFILE 2>&1 echo >> $LOGFILE 2>&1 cat $LOGFILE | mail -s "SRVNAS01 - Image" BENUTZER@DOMAIN.TLD
chmod +x /bin/image.sh
crontab -e 15 03 * * 0 /usr/image.sh > /dev/null 2>&1
Backup: BrandZone
Für mein System möchte ich eine verschlüsselte USB-Platte als Brandschutzzone verwenden, um die wichtigesten Daten als Kopie ausserhalb der Wohnung zu lagern.
Dafür möchte ich eine bestimmt Platte an den DockStar stecken und dieser soll automatisch die verschlüssete USB-Platte einbinden, syncronisieren, entfernen und schlafen legen, sodass ich diese nur wieder abziehen muss.
Der DockStar hat sogar einen Crypto-Chip integriert, somit muss sich der Prozessor nicht mehr darum kümmern.
Zuerst wird etwas software installiert.
apt-get install cryptsetup hashalot apt-get install udisks
Ist das Kernelmodul dm_mod geladen?
root@srvnas01:~# lsmod |grep dm_mod dm_mod 56635 1 dm_crypt
Wenn das erfüllt ist erzeugt man eine Schlüsseldatei, damit das System die USB-Platte ohne Passworteingabe einhängen kann.
dd if=/dev/urandom of=/mnt/brandzone.key bs=1 count=256
nur der Benutzer root darf die Datei lesen:
chmod 400 /mnt/brandzone.key
Die USB-Platte kann jetzt an den DockStar angeschlossen werden. Mit dmesg kann man nachsehen welches device die USB-Platte zugewiesen bekommen hat. Bei mir ist es /dev/sdc1. Sollte die USB-Platte noch keine Partition enthalten ist diese mit fdisk zu erstellen.
[241944.706066] scsi 5:0:0:0: Direct-Access ST332082 0A 3.AA PQ: 0 ANSI: 0 [241944.718657] sd 5:0:0:0: [sdc] 625142448 512-byte logical blocks: (320 GB/298 GiB) [241944.730529] sd 5:0:0:0: [sdc] Write Protect is off [241944.735460] sd 5:0:0:0: [sdc] Mode Sense: 03 00 00 00 [241944.735474] sd 5:0:0:0: [sdc] Assuming drive cache: write through [241944.743997] sd 5:0:0:0: [sdc] Assuming drive cache: write through [241944.750248] sdc: sdc1 [241951.621394] sd 5:0:0:0: [sdc] Assuming drive cache: write through [241951.627607] sd 5:0:0:0: [sdc] Attached SCSI disk
Als nächstes wird ein Crypto-Device erstellt. Damit stellt uns der Kernel ein virtuelles Device zur Verfügung, über das auf die verschlüsselte Partition zugegriffen werden kann.
root@srvnas01:~# cryptsetup luksFormat -c aes -h sha1 -s 256 -d /mnt/brandzone.key /dev/sdc1 WARNING! ======== This will overwrite data on /dev/sdc1 irrevocably. Are you sure? (Type uppercase yes): YES
Crypto-Device öffnen:
cryptsetup luksOpen -d /mnt/brandzone.key /dev/sdc1 brandzone
Dateisystem erstellen:
mkfs.ext4 -m0 -L "BrandZone" /dev/mapper/brandzone
Einhängepunkt erstellen...
mkdir /mnt/brandzone
... einhängen, testen ...
mount /dev/mapper/brandzone /mnt/brandzone/ mkdir /mnt/brandzone/backup mkdir /mnt/brandzone/backup/TimeMachine mkdir /mnt/brandzone/backup/TimeMachine/.AppleDB mkdir /mnt/brandzone/backup/TimeMachine/.AppleDesktop mkdir /mnt/brandzone/backup/TimeMachine/.AppleDouble mkdir /mnt/brandzone/backup/TimeMachine/MacMini.sparsebundle mkdir /mnt/brandzone/backup/rsnapshot mkdir /mnt/brandzone/backup/rsnapshot/tuxBook.snapshot mkdir /mnt/brandzone/backup/rsnapshot/tuxBook.snapshot/daily.0 mkdir /mnt/brandzone/sicherung
... und wieder aushängen...
umount /mnt/brandzone cryptsetup luksClose brandzone
Nun wird eine Regel für udev erstellt, damit der Kernel nach dem Anstecken der USB-Platte automatisch ein Script ausführt.
root@srvnas01:/tmp# udevadm info --query all --path /block/sdc/sdc1 | grep VENDOR E: ID_VENDOR=ST332082 E: ID_VENDOR_ENC=ST332082 E: ID_VENDOR_ID=059b
Der Kernel soll nach dem einstecken der USB-Platte mit der Herstellerkennung "ST332082" ein Device "brandzone" erstellen und dann das Script "brandzone.sh" ausführen. Dafür muss folgende udev Regel erstellt werden:
nano /etc/udev/rules.d/00.rules ACTION=="add", KERNEL=="sd?1", ATTRS{vendor}=="ST332082", NAME="%k", SYMLINK+="brandzone", GROUP="storage", RUN+="/bin/brandzone.sh %k"
Nun noch das Script:
nano /bin/brandzone.sh #!/bin/sh LOGFILE=/tmp/bz.log LOGERROR=/tmp/bz.err rm -f $LOGFILE echo "Beginne Syncronisation:" >> $LOGFILE 2>&1 date >> $LOGFILE 2>&1 sleep 10 >> $LOGFILE 2>&1 echo "luksOpen:" >> $LOGFILE 2>&1 cryptsetup luksOpen -d /mnt/brandzone.key /dev/brandzone brandzone >> $LOGFILE 2>&1 echo "mount:" >> $LOGFILE 2>&1 mount /dev/mapper/brandzone /mnt/brandzone >> $LOGFILE 2>&1 echo "Syncronisiere:" >> $LOGFILE 2>&1 rsync -av --delete --stats /mnt/data/backup/rsnapshot/ /mnt/brandzone/backup/rsnapshot/ >> $LOGFILE 2>&1 rsync -av --delete --stats /mnt/data/sicherung/ /mnt/brandzone/sicherung/ >> $LOGFILE 2>&1 rsync -av --delete --stats /mnt/data/video/dv-band/ /mnt/brandzone/video/dv-band/ >> $LOGFILE 2>&1 rsync -av --delete --stats /mnt/data/backup/srvnas01/ /mnt/brandzone/backup/srvnas01/ >> $LOGFILE 2>&1 rsync -av --delete --stats /mnt/data/backup/TimeMachine/.AppleDB/ /mnt/brandzone/backup/TimeMachine/.AppleDB/ >> $LOGFILE 2>&1 rsync -av --delete --stats /mnt/data/backup/TimeMachine/.AppleDesktop/ /mnt/brandzone/backup/TimeMachine/.AppleDesktop/ >> $LOGFILE 2>&1 rsync -av --delete --stats /mnt/data/backup/TimeMachine/.AppleDouble/ /mnt/brandzone/backup/TimeMachine/.AppleDouble/ >> $LOGFILE 2>&1 rsync -av --delete --stats /mnt/data/backup/TimeMachine/MacMini.sparsebundle/ /mnt/brandzone/backup/TimeMachine/MacMini.sparsebundle/ >> $LOGFILE 2>&1 sleep 10 >> $LOGFILE 2>&1 df | grep brandzone >> $LOGFILE 2>&1 sync >> $LOGFILE 2>&1 echo "unmount:" >> $LOGFILE 2>&1 umount /mnt/brandzone >> $LOGFILE 2>&1 echo "luksClose:" >> $LOGFILE 2>&1 cryptsetup luksClose brandzone >> $LOGFILE 2>&1 sleep 10 >> $LOGFILE 2>&1 echo "HDD Sleep" >> $LOGFILE 2>&1 sdparm --flexible --command=stop /dev/$1 >> $LOGFILE 2>&1 sdparm --flexible --command=stop /dev/$1 >> $LOGFILE 2>&1 date >> $LOGFILE 2>&1 echo "Fertig..." >> $LOGFILE 2>&1 cat $LOGFILE | mail -s "SRVNAS01 - Sync: Brandzone" BENUTZER@DOMAIN.TLD
Es ist noch nicht die schönste Lösung aber es funktioniert soweit.
chmod +x /bin/brandzone.sh
Wenn alles richtig ist, sollte das System nach dem anstecken der USB-Platte automatisch Syncronisieren.
Manuelles Einbinden:
cryptsetup luksOpen -d /mnt/brandzone.key /dev/disk/by-uuid/b0d35d34-cc4f-4d6d-972a-7b034e7fc1de brandzone mount /dev/mapper/brandzone /mnt/brandzone
Manuelles Aushängen:
umount /mnt/brandzone cryptsetup luksClose brandzone
Datendurchsatz
Falk Husemann hat die Einstellungen noch optimiert und sollte so den maximalen Durchsatz bei sequentiellen Lese- und Schreiboperationen bei Netzwerkverbindungen zu Lasten der Speicherverwaltung verbessert.
nano /etc/rc.local.durchsatz blockdev --setra 16384 /dev/sda ifconfig eth0 txqueuelen 5000 echo deadline > /sys/block/sda/queue/scheduler
chmod 700 /etc/rc.local.durchsatz
Vor "exit 0" einfügen.
nano /etc/rc.local /etc/rc.local.durchsatz
Am Ende ergänzen
nano /etc/sysctl.conf # % Anteil des Arbeitsspeichers für E/A-Anfragen, bis Daten sofort auf Festplatte geschrieben werden. vm.dirty_ratio=8 # % Anteil des Arbeitsspeichers für E/A-Anfragen, bis Daten im Hintergrund auf Festplatte geschrieben werden vm.dirty_background_ratio=5 # Arbeitsspeicher eher für E/A-Cache als für Anwendungen verwenden, wenn möglich. vm.vfs_cache_pressure=50 # Auslagern von nicht benutzten Programmen in Swapspeicher, statt E/A-Cache schreiben. vm.swappiness=100 # Puffert bis zu 5000 empfangene Pakete im Arbeitsspeicher, um Paketverlust zu vermeiden net.core.netdev_max_backlog=5000 # TCP-Erweiterungen deaktivieren, um Platz im TCP-Header zu sparen. net.ipv4.tcp_sack=0 net.ipv4.tcp_timestamps=0 # Verbindungen net.ipv4.tcp_fin_timeout=10 net.ipv4.tcp_tw_recycle=1
Boot tut gut...
reboot