+++ /dev/null
-###############################################################################
-# #
-# IPFire.org - A linux based firewall #
-# Copyright (C) 2007-2013 IPFire Team <info@ipfire.org> #
-# #
-# This program is free software: you can redistribute it and/or modify #
-# it under the terms of the GNU General Public License as published by #
-# the Free Software Foundation, either version 3 of the License, or #
-# (at your option) any later version. #
-# #
-# This program is distributed in the hope that it will be useful, #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
-# GNU General Public License for more details. #
-# #
-# You should have received a copy of the GNU General Public License #
-# along with this program. If not, see <http://www.gnu.org/licenses/>. #
-# #
-###############################################################################
-
-# Set histchars to an empty string so we are able to replace an
-# exclamation mark.
-histchars=
-
-echo "Scanning for possible destination drives"
-
-function _mount() {
- local what=${1}
-
- # Don't mount if the device does not exist.
- [ -e "${what}" ] || return 1
-
- mount ${what} /harddisk 2>/dev/null
-}
-
-function _umount() {
- umount -l /harddisk 2>/dev/null
-}
-
-function check_source_drive() {
- local device="/dev/${1}"
-
- local ret=1
- local dev
- for dev in ${device} ${device}1; do
- # Mount the device (if possible).
- _mount ${dev} || continue
-
- if [ -n "$(ls /harddisk/ipfire-*.tlz 2>/dev/null)" ]; then
- ret=0
- fi
-
- _umount
-
- # Stop if the device has been detected as a source drive.
- [ "${ret}" = "0" ] && break
- done
-
- return ${ret}
-}
-
-for path in /sys/block/*; do
- device=$(basename ${path})
-
- # Skip devices which cannot be used.
- case "${device}" in
- # Virtual devices.
- loop*|ram*)
- continue
- ;;
- # Floppy.
- fd*)
- continue
- ;;
- # Cd/Tape.
- sr*)
- continue
- ;;
- esac
-
- # Replace any exclamation marks (e.g. cciss!c0d0).
- device_=${device//!/\/}
-
- # Guess if this could be a raid device.
- for dev in ${device_} ${device_}p1; do
- if [ -e "/dev/${dev}" ]; then
- device=${dev}
- break
- fi
- done
-
- # Check if user want skip by commandline
- if [ "$(grep "skipdst=${device_}" /proc/cmdline)" ]; then
- echo "${device_} was skipped via cmdline."
- continue
- fi
-
- echo "Checking ${device_}"
- if check_source_drive ${device_}; then
- echo " is source drive - skipping"
- continue
- fi
-
- device_size=$(cat /sys/block/${device}/size)
- if [ "${device_size}" = "0" ]; then
- echo " is empty - skipping"
- continue
- fi
-
- # Found it.
- echo " OK, this is it..."
- echo -n "${device_}" > /tmp/dest_device
-
- if [ ${device_size} -gt 0 ]; then
- # Disk size to GiB.
- device_size=$(( ${device_size} / 2097152 ))
-
- # Build string with drive details
- device_str="/dev/${device_} - ${device_size} GiB -"
- else
- device_str="/dev/${device_} -"
- fi
- device_str="${device_str} $(cat /sys/block/${device}/device/vendor)"
- device_str="${device_str} $(cat /sys/block/${device}/device/model)"
-
- # Remove all whitespace.
- device_str=$(echo ${device_str})
-
- echo -n "${device_str}" > /tmp/dest_device_info
-
- # Exit code table:
- # 1: sda
- # 2: RAID
- # 10: nothing found
- case "${device_}" in
- *p1|*c0d0)
- exit 2
- ;;
- *)
- exit 1
- ;;
- esac
-done
-
-# Nothing found.
-exit 10