Remove ramdisks for RRD databases

Ramdisks are very limited in space and as new graphs
are generated for OpenVPN N2N connections, etc. more
space is necessary.

This patch will enable ramdisks for all systems with more
than 490M of memory and allows the user to force using
a ramdisk on systems with less memory.

Signed-off-by: Alexander Marx <alexander.marx@ipfire.org>
Acked-by: Arne Fitzenreiter <arne.fitzenreiter@ipfire.org>
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
This commit is contained in:
Alexander Marx
2015-12-03 13:14:23 +00:00
committed by Michael Tremer
parent 74e5c32e19
commit c4a451eead
10 changed files with 162 additions and 110 deletions

View File

@@ -125,12 +125,13 @@ etc/rc.d/init.d/sysctl
etc/rc.d/init.d/sysklogd
etc/rc.d/init.d/template
#etc/rc.d/init.d/tftpd
etc/rc.d/init.d/tmpfs
#etc/rc.d/init.d/tmpfs
#etc/rc.d/init.d/tor
etc/rc.d/init.d/udev
etc/rc.d/init.d/udev_retry
etc/rc.d/init.d/upnpd
#etc/rc.d/init.d/vdr
etc/rc.d/init.d/vnstat
#etc/rc.d/init.d/vdradmin
#etc/rc.d/init.d/vsftpd
#etc/rc.d/init.d/watchdog
@@ -149,13 +150,14 @@ etc/rc.d/rc0.d/K30sshd
etc/rc.d/rc0.d/K45random
etc/rc.d/rc0.d/K47setclock
etc/rc.d/rc0.d/K49cyrus-sasl
etc/rc.d/rc0.d/K51vnstat
etc/rc.d/rc0.d/K78snort
etc/rc.d/rc0.d/K79leds
etc/rc.d/rc0.d/K80network
etc/rc.d/rc0.d/K82wlanclient
#etc/rc.d/rc0.d/K84bluetooth
#etc/rc.d/rc0.d/K85messagebus
etc/rc.d/rc0.d/K85tmpfs
#etc/rc.d/rc0.d/K85tmpfs
etc/rc.d/rc0.d/K90sysklogd
etc/rc.d/rc0.d/S60sendsignals
etc/rc.d/rc0.d/S70localnet
@@ -163,7 +165,8 @@ etc/rc.d/rc0.d/S80mountfs
etc/rc.d/rc0.d/S90swap
etc/rc.d/rc0.d/S99halt
#etc/rc.d/rc3.d
etc/rc.d/rc3.d/S01tmpfs
#etc/rc.d/rc3.d/S01tmpfs
etc/rc.d/rc3.d/S01vnstat
etc/rc.d/rc3.d/S10sysklogd
#etc/rc.d/rc3.d/S15messagebus
#etc/rc.d/rc3.d/S16bluetooth
@@ -197,13 +200,14 @@ etc/rc.d/rc6.d/K30sshd
etc/rc.d/rc6.d/K45random
etc/rc.d/rc6.d/K47setclock
etc/rc.d/rc6.d/K49cyrus-sasl
etc/rc.d/rc6.d/K51vnstat
etc/rc.d/rc6.d/K78snort
etc/rc.d/rc6.d/K79leds
etc/rc.d/rc6.d/K80network
etc/rc.d/rc6.d/K82wlanclient
#etc/rc.d/rc6.d/K84bluetooth
#etc/rc.d/rc6.d/K85messagebus
etc/rc.d/rc6.d/K85tmpfs
#etc/rc.d/rc6.d/K85tmpfs
etc/rc.d/rc6.d/K90sysklogd
etc/rc.d/rc6.d/S60sendsignals
etc/rc.d/rc6.d/S70mountfs

View File

@@ -126,13 +126,14 @@ etc/rc.d/init.d/sysctl
etc/rc.d/init.d/sysklogd
etc/rc.d/init.d/template
#etc/rc.d/init.d/tftpd
etc/rc.d/init.d/tmpfs
#etc/rc.d/init.d/tmpfs
#etc/rc.d/init.d/tor
#etc/rc.d/init.d/transmission
etc/rc.d/init.d/udev
etc/rc.d/init.d/udev_retry
etc/rc.d/init.d/upnpd
#etc/rc.d/init.d/vdr
etc/rc.d/init.d/vnstat
#etc/rc.d/init.d/vdradmin
#etc/rc.d/init.d/vsftpd
#etc/rc.d/init.d/watchdog
@@ -151,13 +152,14 @@ etc/rc.d/rc0.d/K30sshd
etc/rc.d/rc0.d/K45random
etc/rc.d/rc0.d/K47setclock
etc/rc.d/rc0.d/K49cyrus-sasl
etc/rc.d/rc0.d/K51vnstat
etc/rc.d/rc0.d/K78snort
etc/rc.d/rc0.d/K79leds
etc/rc.d/rc0.d/K80network
etc/rc.d/rc0.d/K82wlanclient
#etc/rc.d/rc0.d/K84bluetooth
#etc/rc.d/rc0.d/K85messagebus
etc/rc.d/rc0.d/K85tmpfs
#etc/rc.d/rc0.d/K85tmpfs
etc/rc.d/rc0.d/K87acpid
etc/rc.d/rc0.d/K90sysklogd
etc/rc.d/rc0.d/S60sendsignals
@@ -166,7 +168,8 @@ etc/rc.d/rc0.d/S80mountfs
etc/rc.d/rc0.d/S90swap
etc/rc.d/rc0.d/S99halt
#etc/rc.d/rc3.d
etc/rc.d/rc3.d/S01tmpfs
#etc/rc.d/rc3.d/S01tmpfs
etc/rc.d/rc3.d/S01vnstat
etc/rc.d/rc3.d/S10sysklogd
etc/rc.d/rc3.d/S12acpid
#etc/rc.d/rc3.d/S15messagebus
@@ -201,13 +204,14 @@ etc/rc.d/rc6.d/K30sshd
etc/rc.d/rc6.d/K45random
etc/rc.d/rc6.d/K47setclock
etc/rc.d/rc6.d/K49cyrus-sasl
etc/rc.d/rc6.d/K51vnstat
etc/rc.d/rc6.d/K78snort
etc/rc.d/rc6.d/K79leds
etc/rc.d/rc6.d/K80network
etc/rc.d/rc6.d/K82wlanclient
#etc/rc.d/rc6.d/K84bluetooth
#etc/rc.d/rc6.d/K85messagebus
etc/rc.d/rc6.d/K85tmpfs
#etc/rc.d/rc6.d/K85tmpfs
etc/rc.d/rc6.d/K87acpid
etc/rc.d/rc6.d/K90sysklogd
etc/rc.d/rc6.d/S60sendsignals

View File

@@ -40,6 +40,7 @@ etc/profile.d/term256.sh
etc/profile.d/umask.sh
etc/resolv.conf
etc/securetty
etc/sysconfig/ramdisk
etc/sysctl.conf
etc/syslog.conf
etc/system-release

View File

@@ -61,6 +61,9 @@ $(TARGET) :
-rm -rf /etc/init.d
ln -svf rc.d/init.d /etc/init.d
#create ramdiskfile to force ramdiskcreation if FORCE=1
echo "FORCE=0" > /etc/sysconfig/ramdisk
for i in $(DIR_SRC)/src/initscripts/init.d/*; do \
install -v -m 754 $$i /etc/rc.d/init.d/; \
done
@@ -128,9 +131,6 @@ $(TARGET) :
ln -sf ../init.d/random /etc/rc.d/rc3.d/S25random
ln -sf ../init.d/random /etc/rc.d/rc6.d/K45random
ln -sf ../../sysconfig/rc.local /etc/rc.d/rc3.d/S98rc.local
ln -sf ../init.d/tmpfs /etc/rc.d/rc0.d/K85tmpfs
ln -sf ../init.d/tmpfs /etc/rc.d/rc3.d/S01tmpfs
ln -sf ../init.d/tmpfs /etc/rc.d/rc6.d/K85tmpfs
ln -sf ../init.d/mediatomb /etc/rc.d/rc3.d/S98mediatomb
ln -sf ../init.d/mediatomb /etc/rc.d/rc0.d/K02mediatomb
ln -sf ../init.d/mediatomb /etc/rc.d/rc6.d/K02mediatomb
@@ -178,6 +178,9 @@ $(TARGET) :
ln -sf ../init.d/firewall /etc/rc.d/rcsysinit.d/S85firewall
ln -sf ../init.d/network-trigger /etc/rc.d/rcsysinit.d/S90network-trigger
ln -sf ../init.d/rngd /etc/rc.d/rcsysinit.d/S92rngd
ln -sf ../init.d/vnstat /etc/rc.d/rc3.d/S01vnstat
ln -sf ../init.d/vnstat /etc/rc.d/rc0.d/K51vnstat
ln -sf ../init.d/vnstat /etc/rc.d/rc6.d/K51vnstat
ln -sf ../init.d/wlanclient /etc/rc.d/rc0.d/K82wlanclient
ln -sf ../init.d/wlanclient /etc/rc.d/rc3.d/S19wlanclient
ln -sf ../init.d/wlanclient /etc/rc.d/rc6.d/K82wlanclient

View File

@@ -76,6 +76,6 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
cd $(DIR_APP) && make all $(MAKETUNING) LOCAL_CONFIGURE_OPTIONS="--enable-readline=yes"
cd $(DIR_APP) && make install
sed -i 's|eth0|green0|g' /etc/vnstat.conf
sed -i 's|/var/lib/vnstat|/var/log/rrd/vnstat|g' /etc/vnstat.conf
sed -i 's|/var/lib/vnstat|/var/log/vnstat|g' /etc/vnstat.conf
@rm -rf $(DIR_APP)
@$(POSTBUILD)

View File

@@ -77,7 +77,36 @@ case "${1}" in
rm -rf /var/run
ln -s ../run /var/run
fi
#
# create some folders
#
if [ ! -e /var/lock/subsys ]; then
mkdir -p /var/lock/subsys
fi
if [ ! -e /var/lock/time ]; then
mkdir -p /var/lock/time
chown nobody.root /var/lock/time
fi
if [ ! -e /var/run/clamav ]; then
mkdir -p /var/run/clamav
chown clamav:clamav /var/run/clamav
fi
if [ ! -e /var/run/cups ]; then
mkdir -p /var/run/cups
fi
if [ ! -e /var/run/dbus ]; then
mkdir -p /var/run/dbus
fi
if [ ! -e /var/run/mysql ]; then
mkdir -p /var/run/mysql
chown mysql:mysql /var/run/mysql
fi
if [ ! -e /var/run/saslauthd ]; then
mkdir -p /var/run/saslauthd
fi
if [ ! -e /var/log/vnstat ]; then
mkdir -p /var/log/vnstat
fi
boot_mesg -n "Cleaning file systems:" ${INFO}
boot_mesg -n " /tmp" ${NORMAL}

View File

@@ -6,6 +6,7 @@
. $rc_functions
eval $(/usr/local/bin/readhash /var/ipfire/main/settings)
eval $(/usr/local/bin/readhash /etc/sysconfig/ramdisk)
if [ "$RRDLOG" = '' ]; then
RRDLOG=/var/log/rrd
@@ -13,6 +14,35 @@ fi
case "$1" in
start)
if [ "$FORCE" == '1' ] || [ "$(mem_amount)" -gt "490" ];then
#mount ramdisk
if ! mountpoint $RRDLOG &>/dev/null; then
boot_mesg "Mount rrd Ramdisk..."
if [ $(find "$RRDLOG" | wc -l) -ne 1 ]; then
backup_ramdisk "$RRDLOG"
fi
mount_ramdisk "$RRDLOG"
evaluate_retval
#cleanup cron
if [ -e $RRDLOG.bak/cron/new.root ]; then
if [ -e $RRDLOG.bak/cron/root ]; then
rm -f $RRDLOG.bak/cron/new.root
fi
fi
#restore old values to ramdisk if exist
restore_ramdisk "$RRDLOG"
fi
else
restore_ramdisk "$RRDLOG"
fi
#
# Move /var/spool/cron to ramdisk and make a symlink
#
if [ ! -L /var/spool/cron ]; then
mv /var/spool/cron /var/log/rrd/cron
ln -s /var/log/rrd/cron /var/spool/cron
fi
# If run from init and collectd alrady started then exit silent
if [ "$(basename $0)" != "collectd" ]; then
if [ "$(ps -A | grep " collectd$")" != "" ]; then
@@ -106,10 +136,8 @@ case "$1" in
boot_mesg "Stopping Collection daemon..."
killproc /usr/sbin/collectd
evaluate_retval
# Save the ramdisk at manual stop but not at shutdown
if [ "$(basename $0)" == "collectd" ]; then
/etc/init.d/tmpfs backup
fi
backup_ramdisk "$RRDLOG"
umount_ramdisk "$RRDLOG"
# sync after backup...
sync
;;

View File

@@ -702,4 +702,35 @@ run_subdir() {
done
}
mem_amount() {
local pagesize="$(getconf PAGESIZE)"
local pages="$(getconf _PHYS_PAGES)"
echo "$(( ${pagesize} * ${pages} / 1024 / 1024 ))"
}
mount_ramdisk() {
mount -t tmpfs none $1
}
umount_ramdisk() {
if mountpoint $1 &>/dev/null; then
umount $1
fi
}
backup_ramdisk() {
if [ ! -e $1.bak ]; then
mkdir -p $1.bak
fi
cp -pR $1/* $1.bak/
rm -rf $1/*
}
restore_ramdisk() {
if [ -e $1.bak ];then
cp -pR $1.bak/* $1/
rm -rf $1.bak/*
fi
}
# End $rc_base/init.d/functions

View File

@@ -1,93 +0,0 @@
#!/bin/sh
# Begin $rc_base/init.d/tmpfs
. /etc/sysconfig/rc
. $rc_functions
eval $(/usr/local/bin/readhash /var/ipfire/main/settings)
if [ "$RRDLOG" = '' ]; then
RRDLOG=/var/log/rrd
fi
case "$1" in
start)
$0 restore
if [ ! -e $RRDLOG.bak/vnstat ]; then
mkdir -p $RRDLOG.bak/vnstat
fi
if [ ! -e $RRDLOG/vnstat ]; then
mkdir -p $RRDLOG/vnstat
fi
#
# create some folders
#
if [ ! -e /var/lock/subsys ]; then
mkdir -p /var/lock/subsys
fi
if [ ! -e /var/lock/time ]; then
mkdir -p /var/lock/time
chown nobody.root /var/lock/time
fi
if [ ! -e /var/run/clamav ]; then
mkdir -p /var/run/clamav
chown clamav:clamav /var/run/clamav
fi
if [ ! -e /var/run/cups ]; then
mkdir -p /var/run/cups
fi
if [ ! -e /var/run/dbus ]; then
mkdir -p /var/run/dbus
fi
if [ ! -e /var/run/mysql ]; then
mkdir -p /var/run/mysql
chown mysql:mysql /var/run/mysql
fi
if [ ! -e /var/run/saslauthd ]; then
mkdir -p /var/run/saslauthd
fi
#
# Move /var/spool/cron to ramdisk and make a symlink
#
if [ ! -L /var/spool/cron ]; then
cp -pR /var/spool/cron /var/log/rrd.bak/cron
mv /var/spool/cron /var/log/rrd/cron
ln -s /var/log/rrd/cron /var/spool/cron
fi
echo_ok
;;
stop)
$0 backup
;;
backup)
boot_mesg "Save ramdisk..."
cp -pR $RRDLOG/* $RRDLOG.bak/
evaluate_retval
;;
restore)
if ! mountpoint $RRDLOG &>/dev/null; then
mount -t tmpfs -o size=64M none "$RRDLOG"
fi
if [ -e $RRDLOG.bak/cron/new.root ]; then
if [ -e $RRDLOG.bak/cron/root ]; then
rm -f $RRDLOG.bak/cron/new.root
fi
fi
if [ -e $RRDLOG.bak ];then
boot_mesg "Restore ramdisk..."
cp -pR $RRDLOG.bak/* $RRDLOG/
fi
;;
*)
echo "Usage: $0 {start|stop|backup}"
exit 1
;;
esac
# End $rc_base/init.d/tmpfs

45
src/initscripts/init.d/vnstat Executable file
View File

@@ -0,0 +1,45 @@
#!/bin/sh
# Begin $rc_base/init.d/vnstat
. /etc/sysconfig/rc
. $rc_functions
eval $(/usr/local/bin/readhash /var/ipfire/main/settings)
if [ "$VNSTATLOG" = '' ]; then
VNSTATLOG=/var/log/vnstat
fi
case "$1" in
start)
if [ "$FORCE" == '1' ] || [ "$(mem_amount)" -gt "490" ];then
if ! mountpoint $VNSTATLOG &>/dev/null; then
boot_mesg "Mount vnstat ramdisk..."
if [ $(find "$VNSTATLOG" | wc -l) -ne 1 ]; then
backup_ramdisk "$VNSTATLOG"
fi
mount_ramdisk "$VNSTATLOG"
evaluate_retval
$0 restore
fi
else
restore_ramdisk "$VNSTATLOG"
fi
;;
stop)
$0 backup
umount_ramdisk "$VNSTATLOG"
;;
backup)
backup_ramdisk "$VNSTATLOG"
;;
restore)
restore_ramdisk "$VNSTATLOG"
;;
*)
echo "Usage: $0 {start|stop|backup}"
exit 1
;;
esac
# End $rc_base/init.d/vnstat