26Apr 100
Arch ramdisk-script 1.4
In meinem Arch Ramdisk-Script <1.4 hatte sich ein dämlicher Bug eingeschlichen: bei sämtlichen rsync-Aufrufen fehlte das --delete.
Das bewirkt z.B. bei Verwendung mit Firefox, dass der Cache nie geleert wird und (streng) monoton wächst - unschön.
Hier die gefixte Version
#!/bin/sh # # Manages outsourcing of specified directories into memory on bootup and # takes care of synchronization/backup on system shutdown. # # Version 1.4, 2010-04-26, by Alexander Koch # # includes . /etc/rc.conf . /etc/rc.d/functions # configuration (syntax is: [persist. storage]:[mountpoint]:[mount options]) DISKS=('/home/alex/.ramdisks/_mozilla:/home/alex/.mozilla:size=100M,uid=1000,gid=100' \ 'empty:/home/alex/.adobe:size=10M,uid=1000,gid=100' \ 'empty:/home/alex/.macromedia:size=10M,uid=1000,gid=100') # helper functions function activate_rd() { [ -d "$1" ] || [ "$1" = "empty" ] || return 1 [ -d "$2" ] || return 1 mount | grep "$2" &>/dev/null && return 1 MNT="mount -t tmpfs" [ -z "$3" ] || MNT="$MNT -o $3" $MNT none "$2" [ $? -gt 0 ] && return 1 if [ "$1" != "empty" ]; then for D in $1/.* $1/*; do [ "$(basename "$D")" == "." ] && continue [ "$(basename "$D")" == ".." ] && continue rsync -axq "$D" "$2" &>/dev/null if [ $? -gt 0 ]; then umount "$2" return 1 fi done fi return 0 } function backup_rd() { mount | grep "$1" &>/dev/null || return 0 if [ "$2" != "empty" ]; then for D in $1/.* $1/*; do [ "$(basename "$D")" == "." ] && continue [ "$(basename "$D")" == ".." ] && continue rsync -axq --delete "$D" "$2" &>/dev/null if [ $? -gt 0 ]; then tar -cf "/root/$(basename "$2")-failed.tar" "$1" return 1 fi done fi umount "$1" || return 1 return 0 } # main logic case $1 in start) stat_busy "Mounting ramdisks" error=0 for M in ${DISKS[@]}; do FROM="$(echo "$M" | cut -d ':' -f 1)" TO="$(echo "$M" | cut -d ':' -f 2)" OPTS="$(echo "$M" | cut -d ':' -f 3)" activate_rd "$FROM" "$TO" "$OPTS" || error=1 done if [ $error -eq 0 ]; then add_daemon ramdisks stat_done else stat_fail exit 1 fi ;; stop) stat_busy "Saving ramdisks" error=0 for M in ${DISKS[@]}; do FROM="$(echo "$M" | cut -d ':' -f 2)" TO="$(echo "$M" | cut -d ':' -f 1)" backup_rd "$FROM" "$TO" || error=1 done if [ $error -eq 0 ]; then rm_daemon ramdisks stat_done else stat_fail echo -n "WARNING: failed to save ramdisk(s), tried to make " echo "backup(s) under /root." echo "Hit enter to proceed shutdown." read DUMMY exit 1 fi ;; restart) if ! ck_daemon ramdisks; then "$0" stop && sleep 3 fi "$0" start ;; *) echo "usage: $0 {start|stop|restart}" ;; esac exit 0
15Mrz 100
Arch ramdisk-script 1.3
Mein Arch ramdisk-script hat ein weiteres Update erfahren, die Konfiguration ist nun mehr nach KISS und dot-Ordner werden korrekt behandelt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | #!/bin/sh # # Manages outsourcing of specified directories into memory on bootup and # takes care of synchronization/backup on system shutdown. # # Version 1.3, 2010-03-15, by Alexander Koch # # includes . /etc/rc.conf . /etc/rc.d/functions # configuration (syntax is: [persist. storage]:[mountpoint]:[mount options]) DISKS=('/home/alex/.ramdisks/_mozilla:/home/alex/.mozilla:size=100M,uid=1000,gid=100' \ 'empty:/home/alex/.adobe:size=10M,uid=1000,gid=100' \ 'empty:/home/alex/.macromedia:size=10M,uid=1000,gid=100') # helper functions function activate_rd() { [ -d "$1" ] || [ "$1" = "empty" ] || return 1 [ -d "$2" ] || return 1 mount | grep "$2" &>/dev/null && return 1 MNT="mount -t tmpfs" [ -z "$3" ] || MNT="$MNT -o $3" $MNT none "$2" [ $? -gt 0 ] && return 1 if [ "$1" != "empty" ]; then for D in $1/.* $1/*; do [ "$(basename "$D")" == "." ] && continue [ "$(basename "$D")" == ".." ] && continue rsync -axq "$D" "$2" &>/dev/null if [ $? -gt 0 ]; then umount "$2" return 1 fi done fi return 0 } function backup_rd() { mount | grep "$1" &>/dev/null || return 0 if [ "$2" != "empty" ]; then for D in $1/.* $1/*; do [ "$(basename "$D")" == "." ] && continue [ "$(basename "$D")" == ".." ] && continue rsync -axq "$D" "$2" &>/dev/null if [ $? -gt 0 ]; then tar -cf "/root/$(basename "$2")-failed.tar" "$1" return 1 fi done fi umount "$1" || return 1 return 0 } # main logic case $1 in start) stat_busy "Mounting ramdisks" error=0 for M in ${DISKS[@]}; do FROM="$(echo "$M" | cut -d ':' -f 1)" TO="$(echo "$M" | cut -d ':' -f 2)" OPTS="$(echo "$M" | cut -d ':' -f 3)" activate_rd "$FROM" "$TO" "$OPTS" || error=1 done if [ $error -eq 0 ]; then add_daemon ramdisks stat_done else stat_fail exit 1 fi ;; stop) stat_busy "Saving ramdisks" error=0 for M in ${DISKS[@]}; do FROM="$(echo "$M" | cut -d ':' -f 2)" TO="$(echo "$M" | cut -d ':' -f 1)" backup_rd "$FROM" "$TO" || error=1 done if [ $error -eq 0 ]; then rm_daemon ramdisks stat_done else stat_fail echo -n "WARNING: failed to save ramdisk(s), tried to make " echo "backup(s) under /root." echo "Hit enter to proceed shutdown." read DUMMY exit 1 fi ;; restart) if ! ck_daemon ramdisks; then "$0" stop && sleep 3 fi "$0" start ;; *) echo "usage: $0 {start|stop|restart}" ;; esac exit 0 |