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