On Sun, Feb 22, 2004 at 10:48:40PM +0530, Deboo wrote: > I have converted my partitions to ext3 but I learnt the other day while > trying to use bdflush to make the hdd spin down, that it won't work with > ext3 partitions ecause ext3 partitions wrrite to disk every 5 seconds, the > journal get written I mean. Is there no way to make the hdd spin down with > ext3? If no, then is reiser or any other kind of journalled FS work with > bdflush? Or is there any other bdflush type utility to do this? >
I am guessing you are using laptop mode because otherwise the kernel flushes its buffers every 30 seconds anyway. Is it a custom kernel or a debian one. If its a debian one, for the moment you will need the script from 2.6 which uses the commit mount option with a small change (it doesn't reset the value). If its a custom kernel I can send you a patch (I am currently working on a fix, but its in a testing phase now and it will probably be some time before it hits the standard kernels.) I attached a modified laptop-mode script you can use for now. Just note that although it has options for xfs and reiserfs they won't work for the moment as they require a patch to add the needed support (reiserfs doesn't have the support at all at the moment and xfs is limited to 5 minutes). > Regards, > Deboo > > > -- > To UNSUBSCRIBE, email to [EMAIL PROTECTED] > with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED] > > > +++++++++++++++++++++++++++++++++++++++++++ > This Mail Was Scanned By Mail-seCure System > at the Tel-Aviv University CC. >
#!/bin/sh # start or stop laptop_mode, best run by a power management daemon when # ac gets connected/disconnected from a laptop # # install as /sbin/laptop_mode # # Contributors to this script: Kiko Piris # Bart Samwel # Dax Kelson # Original Linux 2.4 version by: Jens Axboe parse_mount_opts () { OPT="$1" shift echo "$*" | \ sed 's/.*/,&,/' | \ sed 's/,'"$OPT"'=[0-9]*,/,/g' | \ sed 's/,,*/,/g' | \ sed 's/^,//' | \ sed 's/,$//' | \ cat - } parse_mount_opts_wfstab () { L_DEV=$1 shift OPT=$1 shift L_OPTS="$*" PARSEDOPTS1="$(parse_mount_opts $OPT $L_OPTS)" # Watch for a default commit/transaction in fstab FSTAB_OPTS="$(cat /etc/fstab | sed 's/ / /g' | grep ^\ *"$L_DEV " | awk '{ print $4 }')" if [ -z "$(echo "$FSTAB_OPTS" | grep "$OPT=")" ] ; then # no commit/transaction option specified in fstab: set it to 0 echo "$PARSEDOPTS1,$OPT=30" else # commit/transaction option specified in fstab: extract the value, and use it echo -n "$PARSEDOPTS1,$OPT=" echo "$FSTAB_OPTS" | \ sed 's/.*/,&,/' | \ sed 's/.*,'"$OPT"'=//' | \ sed 's/,.*//' | \ cat - fi } KLEVEL="$(uname -r | cut -c1-3)" case "$KLEVEL" in "2.4"|"2.6") true ;; *) echo "Unhandled kernel version: $KLEVEL ('uname -r' = '$(uname -r)')" exit 1 ;; esac # Shall we remount journaled fs. with appropiate commit/transaction interval? (1=yes) DO_REMOUNTS=1 # age time, in seconds. should be put into a sysconfig file MAX_AGE=600 # Allowed dirty ratio, in pct. should be put into a sysconfig file as well. DIRTY_RATIO=40 # kernel default dirty buffer age DEF_AGE=30 DEF_UPDATE=5 DEF_DIRTY_BACKGROUND_RATIO=10 DEF_DIRTY_RATIO=40 # This is temporary: we have to read this from the kernel somewhere. HZ=100 # hdparm spindown settings ACAD_HD=0 BATT_HD=4 if [ ! -e /proc/sys/vm/laptop_mode ]; then echo "Kernel is not patched with laptop_mode patch." exit 1 fi if [ ! -w /proc/sys/vm/laptop_mode ]; then echo "You do not have enough privileges to enable laptop_mode." exit 1 fi case "$1" in start) # XFS counts in jiffies, the others in centisecs. AGE=$((100*$MAX_AGE)) XFS_AGE=$(($HZ*$MAX_AGE)) echo -n "Starting laptop_mode" echo "1" > /proc/sys/vm/laptop_mode case "$KLEVEL" in "2.4") echo "30 500 0 0 $AGE $AGE 60 20 0" > /proc/sys/vm/bdflush ;; "2.6") echo "$AGE" > /proc/sys/vm/dirty_writeback_centisecs echo "$AGE" > /proc/sys/vm/dirty_expire_centisecs echo "$DIRTY_RATIO" > /proc/sys/vm/dirty_ratio echo "$DIRTY_RATIO" > /proc/sys/vm/dirty_background_ratio ;; esac if [ -d /proc/sys/vm/pagebuf ] ; then # This only needs to be set, not reset -- it is only used when # laptop mode is enabled. echo $XFS_AGE > /proc/sys/vm/pagebuf/lm_flush_age fi if [ $DO_REMOUNTS -eq 1 ]; then cat /etc/mtab | \ while read DEV MP FST OPTS DUMP PASS ; do case "$FST" in "ext3") PARSEDOPTS="$(parse_mount_opts commit $OPTS)" mount $DEV -t $FST $MP -o remount,$PARSEDOPTS,commit=$MAX_AGE ;; "reiserfs") PARSEDOPTS="$(parse_mount_opts transaction $OPTS)" mount $DEV -t $FST $MP -o remount,$PARSEDOPTS,transaction=$MAX_AGE ;; # No need to do anything for xfs esac done fi /sbin/hdparm -S $BATT_HD /dev/hda > /dev/null 2>&1 /sbin/hdparm -B 1 /dev/hda > /dev/null 2>&1 echo "." ;; stop) U_AGE=$((100*$DEF_UPDATE)) B_AGE=$((100*$DEF_AGE)) echo -n "Stopping laptop_mode" echo "0" > /proc/sys/vm/laptop_mode case "$KLEVEL" in "2.4") echo "30 500 0 0 $U_AGE $B_AGE 60 20 0" > /proc/sys/vm/bdflush ;; "2.6") echo "$U_AGE" > /proc/sys/vm/dirty_writeback_centisecs echo "$B_AGE" > /proc/sys/vm/dirty_expire_centisecs echo "$DEF_DIRTY_RATIO" > /proc/sys/vm/dirty_ratio echo "$DEF_DIRTY_BACKGROUND_RATIO" > /proc/sys/vm/dirty_background_ratio ;; esac if [ $DO_REMOUNTS -eq 1 ]; then cat /etc/mtab | \ while read DEV MP FST OPTS DUMP PASS ; do case "$FST" in "ext3") PARSEDOPTS="$(parse_mount_opts_wfstab $DEV commit $OPTS)" mount $DEV -t $FST $MP -o remount,$PARSEDOPTS ;; "reiserfs") PARSEDOPTS="$(parse_mount_opts_wfstab $DEV transaction $OPTS)" mount $DEV -t $FST $MP -o remount,$PARSEDOPTS ;; # No need to do anything for xfs esac done fi /sbin/hdparm -S $ACAD_HD /dev/hda > /dev/null 2>&1 /sbin/hdparm -B 255 /dev/hda > /dev/null 2>&1 echo "." ;; *) echo "Usage: $0 {start|stop}" ;; esac exit 0