7a44e7e81d
* ssd_fw_upgrade * changed hdparm upgrade post filesystems unmount
101 lines
2.8 KiB
Bash
Executable File
101 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# This script does the SSD firware upgrade
|
|
# This has been integrated as part of reboot/warm-reboot/fast-reboot script.
|
|
SKIP_UPGRADE=0
|
|
CHECKSUM_VALUE="b9b6dbb362b7632837af9cd320c5d147"
|
|
unmount () {
|
|
exist=$(mount | grep " $1 " | wc -l)
|
|
if [ $exist -ne 0 ]; then
|
|
umount $1
|
|
if [[ $? -ne 0 ]]; then
|
|
fuser -vm $1
|
|
SKIP_UPGRADE=1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
mp_tool_reboot() {
|
|
if [ ! -d /mnt/ramdisk ]; then
|
|
mkdir -p /mnt/ramdisk;
|
|
fi
|
|
mount -t tmpfs -o size=16m swap /mnt/ramdisk
|
|
cp /tmp/SSD.zip /mnt/ramdisk/
|
|
cd /mnt/ramdisk
|
|
unzip -q SSD.zip
|
|
chmod +x SSD/mp_64
|
|
|
|
#stopped journal and syslog services to unmount /host
|
|
systemctl stop systemd-journald.service
|
|
systemctl stop systemd-journald.socket
|
|
systemctl stop systemd-journald-audit.socket
|
|
systemctl stop systemd-journald-dev-log.socket
|
|
systemctl stop syslog.service
|
|
systemctl stop syslog.socket
|
|
systemctl stop docker.socket
|
|
sleep 2
|
|
unmount /var/log
|
|
loop_exist=$(losetup -a | grep loop1 | wc -l)
|
|
if [ $loop_exist -ne 0 ]; then
|
|
losetup -d /dev/loop1
|
|
fi
|
|
unmount /boot
|
|
unmount /var/lib/docker
|
|
unmount /host
|
|
#start the services whichever we stopped for succesful /host unmount
|
|
systemctl start systemd-journald.service
|
|
systemctl start systemd-journald.socket
|
|
systemctl start systemd-journald-audit.socket
|
|
systemctl start systemd-journald-dev-log.socket
|
|
systemctl start syslog.service
|
|
systemctl start syslog.socket
|
|
if [ $SKIP_UPGRADE == 0 ]; then
|
|
echo 1 > /sys/class/scsi_device/4\:0\:0\:0/device/delete
|
|
echo "0 0 0" > /sys/class/scsi_host/host4/scan
|
|
sleep 3
|
|
DEVICE=$(dmesg | grep "Attached SCSI disk" | sed -n \$p |
|
|
grep -o -P '(sd[a-z])')
|
|
cd /mnt/ramdisk/SSD
|
|
./mp_64 -d /dev/${DEVICE} -c 1 -u -k -r
|
|
fi
|
|
}
|
|
|
|
hdparm-upgrade() {
|
|
if [[ -x "$(command -v hdparm)" ]];then
|
|
hdparm --fwdownload /tmp/SSD/SYS_S.bin --yes-i-know-what-i-am-doing \
|
|
--please-destroy-my-drive /dev/sda
|
|
fi
|
|
}
|
|
|
|
platform_check() {
|
|
platform=$(sonic-cfggen -H -v DEVICE_METADATA.localhost.platform)
|
|
version_type=$(dmesg | grep "mSATA")
|
|
md5sum_value=$(md5sum /tmp/SSD.zip | cut -d ' ' -f1)
|
|
if [[ "$md5sum_value" != "$CHECKSUM_VALUE" || "$platform" != *"s6100"* ||
|
|
"$version_type" != *"3IE3"* || "$version_type" != *"S16425c1"* ]];then
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
if [[ ! -f /tmp/SSD.zip ]];then
|
|
exit 1
|
|
fi
|
|
|
|
case "$1" in
|
|
fast-reboot|warm-reboot)
|
|
platform_check
|
|
mp_tool_reboot
|
|
;;
|
|
reboot)
|
|
platform_check
|
|
cd /tmp
|
|
unzip -q SSD.zip
|
|
;;
|
|
hdparm-upgrade)
|
|
$1
|
|
;;
|
|
*)
|
|
echo "Usage: $0 {fast-reboot|warm-reboot|reboot|hdparm-upgrade}" >&2
|
|
exit 2
|
|
;;
|
|
esac
|