....
[megosztott_dokumentumok]
comment = dokumentumok megosztása
path = /srv/samba/g-drive
# username = balazs,istvan,rozsi,tercsi,fercsi,kata,klára
# valid users = és valahány név van a naptárban
# read list = nobody
# write list = balazs, istvan, rozsi
vfs objects = shadow_copy2
shadow: snapdir = /srv/samba/g-drive/.snapstots
shadow: basedir = /srv/samba/g-drive
shadow: format = "@%Y.%m.%d-%H.%M.%S"
shadow: sort = desc
shadow: localtime = yes
read only = No
create mask = 0777
guest ok = Yes
....
no persze nincs meg még teljesen, elsősorban a formátum nem stimmel még, mert egy régebbi fájlt szedtem elő, ahol az olvashatóság iránt nagyobb volt az igény.
most az a kérdés egyáltalán működni fog-e az átalakítások után :)
/$ mount | grep btrfs
/dev/sda5 on / type btrfs (rw,noatime,compress=lzo,ssd,discard,space_cache,subvolid=257,subvol=/@ROOT)
/dev/sda5 on /.snapshots type btrfs (rw,noatime,compress=lzo,ssd,discard,space_cache,subvolid=337,subvol=/@ROOT.snapshots)
/dev/sda5 on /usr type btrfs (rw,noatime,compress=lzo,ssd,discard,space_cache,subvolid=262,subvol=/@USR)
/dev/sda5 on /usr/.snapshots type btrfs (rw,noatime,compress=lzo,ssd,discard,space_cache,subvolid=338,subvol=/@USR.snapshots)
....
A snapshotok könyvtára nem egy a forrás könyvtár alatt létrehozott subvol, mint az látható.
:/$ ls -l .snapshots/
összesen 0
drwxr-xr-x 1 root root 298 aug 25 08:45 @2017-08-25_14
drwxr-xr-x 1 root root 298 aug 25 08:45 @2017-08-25_15
drwxr-xr-x 1 root root 298 aug 25 08:45 @2017-08-25_16
drwxr-xr-x 1 root root 298 aug 25 08:45 @2017-08-25_17
drwxr-xr-x 1 root root 298 aug 25 08:45 @2017-08-25_18
drwxr-xr-x 1 root root 298 aug 25 08:45 @2017-08-25_19
drwxr-xr-x 1 root root 298 aug 25 08:45 @2017-08-25_20
drwxr-xr-x 1 root root 298 aug 25 08:45 @2017-08-25_21
drwxr-xr-x 1 root root 298 aug 25 08:45 @2017-08-26_07
drwxr-xr-x 1 root root 298 aug 25 08:45 @2017-08-26_08
drwxr-xr-x 1 root root 298 aug 25 08:45 @2017-08-26_09
drwxr-xr-x 1 root root 298 aug 25 08:45 @2017-08-26_10
drwxr-xr-x 1 root root 298 aug 25 08:45 @2017-08-26_11
drwxr-xr-x 1 root root 298 aug 25 08:45 @2017-08-26_12
drwxr-xr-x 1 root root 298 aug 25 08:45 @2017-08-26_13
Egyenlőre ez az eredmény, de még csak 2 napja fut. több módosításon is átesett már tesztüzem közben.
no és ami az egészet létrehozta:
- mármint ez:) azaz egy új verzió -
#!/bin/sh
# filename /etc/cron.hourly/snapmaker[.sh]
# apostrophe - 2017. 08. 25. - 2017. 08. 27.
set -x
ENABLE=1
# snapshotok forrásai
SOURCES="/ /var /usr /mnt/EncryptedDRV"
SOURCE=""
DEST=""
SNAP=""
# honapok napok órák száma - érvényességi ideje
MAXMONTHS=3
MAXDAYS=7
MAXHOURS=10
# mindenképpen - 1 - csak változás esetén - 0 -
ALWAYS=0
# jenlen dátum másodperben
CDATE=$(date +%s)
CONFDIR="/etc/snapmaker"
#####################
#
# FUNKCIÓK
#
#####################
# snapsotok listája egy adott - $1 - könyvtárból
# -o print only subvolumes below specified path
# -s list snapshots only in the filesystem
sublist() { btrfs sub list -os "$1" 2>/dev/null | sed 's/^.*\(@[0-9]*.*\)$/\1/'; }
changes() {
local sourcedir=$1
local dest=$2
local lastsnap
local genid
local ret=0
lastsnap="$(echo $(sublist ${dest} | sort -r) | cut -d " " -f 1 )"
if [ "${lastsnap}" ]; then
genid="$(btrfs sub find-new "${dest}/${lastsnap}" 9999999|cut -d " " -f 4)"
echo "$(btrfs subvolume find-new "${sourcedir}" ${genid} | cut -d " " -f 17-1000 | sed '/^$/d'| wc -l)"
else
echo 1
ret=1
fi
return ${ret}
}
# a snapshot létrehozása
mksnap() {
local sourcedir=$1
local destdir=$2
local datep
local snapname
local filterdays
local filtermonths
# a létrehozandó snapsot neve
datep="$(date '+%Y-%m-%d %H')"
snapname="${destdir}/@$(echo ${datep} | tr " " "_")"
filterdays=$(date +%Y-%m-%d -d "${datep}")
filtermonths=$(date +%Y-%m -d "${datep}")
if [ -e "${snapname}" ]; then
return 0
elif [ ${MAXHOURS} -gt 0 ]; then
btrfs subvolume snapshot -r "${sourcedir}" "${snapname}"
elif [ ${MAXDAYS} -gt 0 -a $(sublist ${destdir} | grep -c "^@${filterdays}") -eq 0 ]; then
btrfs subvolume snapshot -r "${sourcedir}" "${snapname}"
elif [ ${MAXMONTHS} -gt 0 -a $(sublist ${destdir} | grep -c "^@${filtermonths}") -eq 0 ]; then
btrfs subvolume snapshot -r "${sourcedir}" "${snapname}"
else
return 1
fi
}
snapmkr() {
local i
local y
local sourcedir
local destdir
local maxmonths
local maxdays
[ -r "$1" ] && . "$1"
# megörzendő snapshotok minimuma
minsnapshots=$((${MAXHOURS}+(${MAXHOURS}/2)))
maxmonths=$(($MAXMONTHS+1))
maxdays=$(($MAXDAYS+1))
for i in ${SOURCES}; do
# a snapshot forrása
sourcedir="${i}"
# a snapshot célkönyvtára
destdir="${sourcedir}/.snapshots"
# # a létrehozandó snapsot neve
# SNAP="@$(date +%Y-%m-%d_%H)"
# ha nem létezik a forrás, v. a cél, új leosztás
if ! (mountpoint -q "${sourcedir}" && (mountpoint -q "${destdir}" || btrfs subvolume show "${destdir}" > /dev/null 2>&1)); then
continue
fi
# változás esetén
if [ ${ALWAYS} -ge 1 ] || [ $(changes "${sourcedir}" "${destdir}") -ge 1 ]; then
# az aktuális snapshot létrehozása
mksnap "${sourcedir}" "${destdir}"
fi
# ------------- snapsotok vizsgálata snapshotok listája alapján
for y in $(sublist ${destdir} | sort); do
# időközben 15-nél kevesebb lett nem törlünk
# csak hogy ne törölje az összes snapshotot
# hosszab kikapcsolt állapot után sem
[ $(sublist ${destdir} | wc -l) -le "${minsnapshots}" ] && continue
# snapshot névből - @2017-12-12_12 - détum - 2017-12-12 12[:00:00] -
sdatep=$(echo "$y" | tr -d "@" | tr "_" " ")
#
#echo -------------- MONTHS ------
#
# snapshot dátuma + maximálisan engedélyezett hónaponkénti snapshotok élettartama mésodpercekben
sdate=$(date +%s -d "${sdatep} + ${maxmonths} months")
# a jelenlegi dárum kissebb mit a maximális életteram akkor,
if [ ${CDATE} -lt ${sdate} ]; then
# a vizsgált snapshot dátuma napok nélkül
DDATE=$(date +%Y-%m- -d "${sdatep}")
# hány darab van a vizsgát snapshotal egy hónapban? egy? -> ugrás az elejére
[ $(sublist ${destdir} | grep -c "^@${DDATE}") -le 1 ] && continue
fi
#
#echo -------------- DAYS ------
#
# snapshot dátuma + maximálisan engedélyezett naponkénti snapshotok élettartama mésodpercekben
sdate=$(date +%s -d "${sdatep} + ${maxdays} days")
# a jelenlegi dárum kissebb mit a maximális életteram akkor,
if [ ${CDATE} -lt ${sdate} ]; then
# a vizsgált snapshot dátuma orák nélkül
DDATE=$(date +%Y-%m-%d -d "${sdatep}")
# hány darab van a vizsgát snapshotal egy napon? egy? -> ugrás az elejére
[ $(sublist ${destdir} | grep -c "^@${DDATE}") -le 1 ] && continue
fi
#
#echo -------------- HOURS ------
#
# snapshot dátuma + maximálisan engedélyezett óránkáni snapshotok élettartama mésodpercekben
sdate=$(date +%s -d "${sdatep} + ${MAXHOURS} hours")
# a jelenlegi dárum kissebb mit a maximális életteram -> ugrás az elejére
[ ${CDATE} -lt ${sdate} ] && continue
#
#echo -------------- DELETE ------
#
# a vizsgált snapshot törlése
btrfs subvolume delete "${destdir}/$y"
done
done
}
#####################
#
# FŐPROGRAM
#
#####################
if [ -r "/etc/default/snapmaker" ]; then
. "/etc/default/snapmaker"
else
printf "# filename /etc/cron.hourly/snapmaker[.sh]\n" > "/etc/default/snapmaker"
printf "# apostrophe - 2017. 08. 25. - 2017. 08. 27.\n" >> "/etc/default/snapmaker"
printf "#\n\n" >> "/etc/default/snapmaker"
printf "# set this to 0 to disable snapmaker, or to 1 to enable it\n" >> "/etc/default/snapmaker"
printf "ENABLE=%s\n\n" ${ENABLE} >> "/etc/default/snapmaker"
printf "# default paramerers for tests\n" >> "/etc/default/snapmaker"
printf "SOURCES=\"/ /var /usr /mnt/EncryptedDRV\"\n" >> "/etc/default/snapmaker"
printf "MAXMONTHS=3\n" >> "/etc/default/snapmaker"
printf "MAXDAYS=7\n" >> "/etc/default/snapmaker"
printf "MAXHOURS=10\n" >> "/etc/default/snapmaker"
printf "ALWAYS=0\n" >> "/etc/default/snapmaker"
fi
[ ${ENABLE} -eq 0 ] && exit 0
mkdir -p ${CONFDIR}
#cat <<EOF > ${CONFDIR}/system.conf
#SOURCES="/ /var /usr /mnt/EncryptedDRV"
#MAXMONTHS=3
#MAXDAYS=7
#MAXHOURS=10
#ALWAYS=0
#EOF
for i in ${CONFDIR}/*.conf; do
. "/etc/default/snapmaker"
. "${CONFDIR}/*.conf"
snapmkr $i
done
#gedit
sz'al, most
- kikapcsolható az /etc/default könyvtárból
- több beállítófájl alkalmazható subvolumek csoportjaira
- hosszabb üzemszünet után sem törli az összes snapshotot
- csak akkor készül snapshot, ha az utolsó snapshot óta változás volt. állítható
itt azért figyelni kell gyakori, de nem lényeges változásokra.
pl a /tmp /var/tmp és egyéb könyvtárakra, és fájlokra
tippeket a szerkesztőségbe, sem kérek,
viszont ötleteket funkciókra igen :)
- apostroph3 blogja
- A hozzászóláshoz be kell jelentkezni
- 635 megtekintés
Hozzászólások
Nem akarlak elkeseríteni, de van snapper Samba VFS modul :)
http://manpages.ubuntu.com/manpages/xenial/man8/vfs_snapper.8.html
BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)
- A hozzászóláshoz be kell jelentkezni
próbáltam, be is mutattam, sokaknak nem tetszett.
egyébként windows sem nagyon használok, nem tudom hosszútávon milyen használni...
és a hülye sorszámozás sem igazán tetszik.
nem hatékony.
olyan suse-s
:)
- A hozzászóláshoz be kell jelentkezni