Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh -x
- # usbfix v0.4 rs232
- PID=$$
- export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/home/root:
- alias logi='logger -p INFO -t usbfix[$PID]'
- [ ! $1 ] && days=30 || days="$1"
- secs=$((((days*24)*60)*60))
- now=$(date +%s)
- chk=$(nvram get usb_chk)
- [ $(echo "$chk" | wc -c ) -lt 2 ] && chk=0
- [ "$chk" -lt $((now-secs)) ] && {
- blkid | grep -Eo 'sd[a-d][0-9]' | while read device; do
- fs=$(mount | grep "^\/dev\/$device\ on\ \/tmp\/" | awk '{print $5}')
- freeme() {
- for process in $(lsof | grep '\/tmp\/mnt\/' | awk '{print $1}'); do
- id=$(ps | grep $process | grep -v 'grep' | awk '{print $1}')
- prog=$(ps | grep $process | grep -v grep | awk '{print $5" "$6" "$7" "$8" "$9" "$10" "$11" "$12" "$13" "$14" "$15}')
- kill "${id}";
- echo "${prog}" >> /tmp/prog
- done
- sleep 1
- umount -f /dev/$device
- sleep 1
- }
- rerun() {
- chmod +x /tmp/prog
- /tmp/prog
- rm /tmp/prog
- }
- echo "${fs}" | grep -q 'ntfs\|fuseblk' && {
- logi "Reparing /dev/$device with filesystem $fs"
- freeme
- /usr/sbin/ntfsck /dev/"$device"
- rerun
- }
- echo "${fs}" | grep -qi 'fat' && {
- logi "Reparing /dev/$device with filesystem $fs"
- # If you have FAT and know the repair command for it please share
- }
- echo "${fs}" | grep -Eq "ext2\|ext3\|ext4" && {
- logi "Reparing /dev/$device with filesystem $fs"
- freeme
- /usr/sbin/e2fsck -p -y -c /dev/"$device"
- rerun
- }
- echo "${fs}" | grep -q 'hpfs\|hfp\|hfs' && {
- logi "Reparing /dev/$device with filesystem $fs"
- freeme
- # Command needs to be checked!
- /usr/sbin/fsck.hfsplus /dev/"$device"
- rerun
- }
- echo "${fs}" | grep -qi "zfs" && {
- logi "Reparing /dev/$device with filesystem $fs"
- freeme
- [ $(zpool list | grep -v "NAME\|no\ pools\ available" | wc -l) -ne 0 ] && {
- zpool list | grep -v "NAME\|no\ pools\ available" | while read line; do
- pname=$(echo $line | awk '{print $1}')
- zpool scrub $pname
- done
- }
- rerun
- # If you have zfs and know the repair command for it please share
- }
- done
- nvram set usb_chk=$now
- nvram commit
- sleep 1
- # reboot
- # should be reboot in production to allow volumes to mount properly
- } || {
- logi "usbfix skipped ($days days have not gone past yet)"
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement