Hallo zusammen,
wer einen Raspi dauerhaft und auf langen zeitraum einsetzen will, den wird irgendwas das wear-leveling der SD-Karte einholen.
Um das problem mit dem schleichenden Tod der SD-Karte zu umgehen, kann man den Raspi weitgehend read-only machen.
Hab hierzu folgende Anleitung gefunden:
http://blog.pi3g.com/2014/04/make-ra...tem-read-only/
Und weil ich das nicht immer (über die Zeit werden es irgendwie immer mehr Raspis...) von Hand machen will, hab ich das aus der Anleitung in ein Script gezogen:
Einzige Abwandlung: Das leeren von Log-Files habe ich auf /var/log begrenzt. Erschien mir wenig sinnvoll alles auf dem SD-Speicher was im Dateinamen auf "log" endet zu leeren.
Gibt's mutige die das auch mal bei sich testen wollen?
Muss für meine Basteleien in /opt/ noch eine Lösung finden (weil da werden auch Log und Cache-Files erzeugt), aber davon mal abgesehen scheint es prima zu laufen.
[update]
Um beispielsweise /opt noch für den read-write Modus im RAM zu nutzen:
und in /etc/fstab folgendes hinzufügen:
wer einen Raspi dauerhaft und auf langen zeitraum einsetzen will, den wird irgendwas das wear-leveling der SD-Karte einholen.
Um das problem mit dem schleichenden Tod der SD-Karte zu umgehen, kann man den Raspi weitgehend read-only machen.
Hab hierzu folgende Anleitung gefunden:
http://blog.pi3g.com/2014/04/make-ra...tem-read-only/
Und weil ich das nicht immer (über die Zeit werden es irgendwie immer mehr Raspis...) von Hand machen will, hab ich das aus der Anleitung in ein Script gezogen:
Code:
#!/bin/bash
# Created 2015-10-24 by tuxedo
# inspired by http://blog.pi3g.com/2014/04/make-raspbian-system-read-only/
if [ $EUID -ne 0 ]; then
echo "Please run as root"
exit 1
fi
#echo -n "Disable swap ..."
#dphys-swapfile swapoff
#dphys-swapfile uninstall
#update-rc.d dphys-swapfile disable
#echo "*done*"
echo "Checking for FuseFS..."
dpkg-query -l unionfs-fuse
FUSEFS_INSTALLED=$?
if [ $FUSEFS_INSTALLED -eq 1 ]; then
echo "FuseFS not installed. Installing ..."
apt-get install unionfs-fuse
echo "FuseFS has been installed."
else
echo "FuseFS already installed. Skipping."
fi
echo -n "Creating UnioNFS mount script ..."
cat <<\EOF > /usr/local/bin/mount_unionfs
#!/bin/sh
DIR=$1
ROOT_MOUNT=$(awk '$2=="/" {print substr($4,1,2)}' < /etc/fstab)
if [ $ROOT_MOUNT = "rw" ]; then
/bin/mount --bind ${DIR}_org ${DIR}
else
/bin/mount -t tmpfs ramdisk ${DIR}_rw
/usr/bin/unionfs-fuse -o cow,allow_other,suid,dev,nonempty ${DIR}_rw=RW:${DIR}_org=RO ${DIR}
fi
EOF
chmod +x /usr/local/bin/mount_unionfs
echo "*done*"
if grep -q "mount stuff read-only" "/etc/fstab"; then
echo "fstab already contains read-only mounts. Skipping."
else
NOW=$(date +"%Y-%m-%d")
# make backup file
cp /etc/fstab /etc/fstab_backup_readonlymount_$NOW
echo -n "Updating fstab with read-only mounts..."
cat <<EOF > /etc/fstab
# mount stuff read-only
prov /proc proc defaults 0 0
# mount as read only
/dev/mmcblk0p1 /boot vfat ro 0 2
/dev/mmcblk0p2 / ext4 ro,noatime 0 1
# mount special folders to raw, using special mount_unionfs script
mount_unionfs /etc fuse defaults 0 0
mount_unionfs /var fuse defaults 0 0
none /tmp tmpfs defaults 0 0
EOF
echo "*done*"
fi
if [ ! -d "/etc_org" ]; then
echo -n "Prepare directories ..."
# backups where all the initial stuff is located (like configs in /etc)
cp -al /etc /etc_org
mv /var /var_org
# read/write folders for ram disk
mkdir /etc_rw
mkdir /var /var_rw
echo "*done*"
else
echo "Directories already prepared. Skipping."
fi
echo -n "Clean up log folder"
cd /var_org/log
# empty files ending with "log"
for f in $(find . -name \*log); do > $f; done
# delete all log-archives
rm -f *.gz
echo "*done*"
echo ""
echo ""
echo "All done."
echo "Please reboot now. Type 'reboot' followed by [enter]-key."
echo ""
Gibt's mutige die das auch mal bei sich testen wollen?
Muss für meine Basteleien in /opt/ noch eine Lösung finden (weil da werden auch Log und Cache-Files erzeugt), aber davon mal abgesehen scheint es prima zu laufen.
[update]
Um beispielsweise /opt noch für den read-write Modus im RAM zu nutzen:
Code:
cp -al /opt /opt_org mkdir /opt_rw
Code:
mount_unionfs /opt fuse defaults 0 0


Kommentar