| #!/bin/sh |
| . /etc/utils.sh |
| |
| sata_blkdev=$(find_sata_blkdev) |
| |
| trim() { |
| local var="$1" |
| var="${var#"${var%%[![:space:]]*}"}" |
| var="${var%"${var##*[![:space:]]}"}" |
| echo -n $var |
| } |
| |
| hddserial() { |
| local var |
| var=$(hdparm -I "$sata_blkdev" | grep "Serial Number") |
| trim "${var##*:}" |
| } |
| |
| check_pairing() { |
| attachedSerial=$(hddserial) |
| pairedSerial=$(hnvram -qr PAIRED_DISK) |
| echo "Attached HDD Serial:$attachedSerial, Paired HDD Serial:$pairedSerial" |
| if [ "$attachedSerial" = "$pairedSerial" ]; then |
| echo " MATCH!" |
| else |
| if [ "$pairedSerial" = "" ]; then |
| echo " NO PAIR; PAIRING:$attachedSerial" |
| hnvram -w PAIRED_DISK="$attachedSerial" |
| else |
| echo " NO MATCH; NO MOUNT" |
| echo 1 >/tmp/gpio/ledcontrol/hdd_bad_pair |
| exit 0 |
| fi |
| fi |
| } |
| |
| FLAGS=noatime,barrier=1,data=writeback,noexec,nosuid,nodev,nohide_stale_gid=200,pin_block_bitmaps |
| |
| case "$1" in |
| start) |
| if ! is-storage-box; then |
| echo "Not a storage box." |
| exit 0 |
| fi |
| failure_media=0 |
| failure_backup=0 |
| mediafs=$(kernopt mediafs) |
| wait-scsi |
| if ! [ -e "$sata_blkdev" ]; then |
| echo "No drive found; rescanning." |
| # "ata1.00: both IDENTIFYs aborted, assuming NODEV" |
| # This happens sometimes, make it rescan. |
| for d in /sys/class/scsi_host/host*/scan; do |
| [ -e "$d" ] && echo "0 0 0" >$d |
| done |
| sleep 5 |
| fi |
| if startswith "$mediafs" "9p:"; then |
| echo "Mounting 9p /var/media." |
| mount -t 9p -o trans=virtio,version=9p2000.L "${mediafs#9p:}" /var/media |
| failure_media=$? |
| elif startswith "$mediafs" "/dev/"; then |
| echo "Mounting ext4 /var/media from '$mediafs'" |
| mount -o "$FLAGS" -t ext4 "$mediafs" /var/media |
| elif [ -e "$sata_blkdev" ]; then |
| hdparm -q -B255 "$sata_blkdev" # disable power saving |
| check_pairing |
| echo "Mounting SATA device." |
| if [ -e "$sata_blkdev"1 ]; then |
| tune2fs -m 0 "$sata_blkdev"1 |
| mount -o "$FLAGS" -t ext4 "$sata_blkdev"1 /var/media |
| failure_media=$? |
| if [ -e "$sata_blkdev"2 ]; then |
| mount -o "$FLAGS" -t ext4 "$sata_blkdev"2 /var/backup |
| failure_backup=$? |
| fi |
| elif [ -h "$sata_blkdev" ]; then |
| tune2fs -m 0 "$sata_blkdev" |
| mount -o "$FLAGS" -t ext4 "$sata_blkdev" /var/media |
| failure_media=$? |
| fi |
| elif is-storage-box; then |
| echo "No drive found in Storage Box; failing." |
| failure_media=1 |
| fi |
| if [ "$failure_media" != 0 ] || [ "$failure_backup" != 0 ]; then |
| echo "HDD mounting error." |
| echo 1 >/tmp/gpio/ledcontrol/hdd_mount_err |
| exit 0 |
| fi |
| ;; |
| stop) |
| # Unmount SATA device |
| echo "Unmounting SATA device" |
| umount /var/media >/dev/null 2>&1 |
| umount /var/backup >/dev/null 2>&1 |
| ;; |
| powerdown) |
| # Shutting off the drive reduces power and heat by another watt or so. |
| if [ -n "$sata_blkdev" ]; then |
| hdparm -S 5 -Y "$sata_blkdev" |
| fi |
| ;; |
| restart|reload) |
| $0 stop |
| $0 start |
| ;; |
| *) |
| echo "Usage: $0 {start|stop|restart|powerdown}" |
| exit 1 |
| esac |