Portál AbcLinuxu, 8. května 2025 00:56
Řešení dotazu:
rsync ..... 2> /dev/null
if ! mount | grep připojený_disk; then exit 0 fi rsync ...
#!/bin/sh
?
Můžu udělat něco takového? :
#!/bin/sh mount /mujusbdisk /umisteni if ! mount | grep připojený_disk; then exit 0 fi rsync ... umount /umisteniAle co se stane, když mountlej bude? Moc diky.
#!/bin/sh # sve UUID zjistis pomoci: blkid /dev/aktualni_jmeno_zarizeni_oddilu UUID="UUID_PRIPOJENEHO_ODDILU_NA_KTEREJ_CHCES_ZALOHOVAT" if ! blkid -U $UUID; then exit 0 fi mount /dev/disk/by-uuid/$UUID /umisteni rsync ... umount /umisteni
mountpoint -q /umisteni && umount /umisteni #nebo dle preferenci zapis if-fi :) if mountpoint -q /umisteni; then umount /umisteni; fi
mountpoint -q /umisteni || mount /dev/disk/by-uuid/$UUID /umisteni #nebo dle preferenci zapis if-fi :) if ! mountpoint -q /umisteni; then mount /dev/disk/by-uuid/$UUID /umisteni; fi
cryptsetup luksOpen
#!/bin/sh # UUID USB disku podle blkid UUID="30a8ed74-3d45-4fb1-8d84-3890cb60b0e1" if ! blkid -U $UUID; then exit 0 fi echo "Rozšifrování a připojení disku" if ! mountpoint -q /mnt/backup; then cryptsetup luksOpen /dev/sdb1 backup && mount /dev/mapper/backup /mnt/usbbackup; fi echo "start synchronizace" rsync -a --progress --delete /FOTKY_ARW /mnt/usbbackup echo "konec synchonizace" echo "odpojení disku" if mountpoint -q /mnt/usbbackup; then umount /mnt/usbbackup/ && cryptsetup luksClose backup; fi echo "Hotovo!"
lvdisplay
neumí být sám o sobě tichý...
# presmerovani stdout - standardni vystup nastroj >/dev/null #nebo to same jinak nastroj 1>/dev/null # presmerovani stderr - standardni error vystup nastroj 2>/dev/null # presmerovani stdout a stderr nastroj 1>/dev/null 2>/dev/null #nebo to same jinak nastroj &>/dev/nullu lvdisplay normalni vystup je kdyz zobrazuje informace, errorvystup je kdyz hlasi ze nenalezl zarizeni, takze aby byl zticha musis presmerovat oboje... tedy v tvem pripade:
lvdisplay /dev/mapper/lvm-root--snap &>/dev/null && echo "Snap uz je..." || echo "Snap jeste neni..."nebo jednoduse kontrolujes jen existenci souboru:
[ -e /dev/mapper/lvm-root--snap ] && echo jenebo dukladneji primo existenci blokoveho zarizeni:
[ -b /dev/mapper/lvm-root--snap ] && echo je(viz seznam operatoru co muzes testovat)
lvdisplay /dev/mapper/lvm-root--snap | grep -q "read/write" && echo "je pro zapis"
#!/bin/sh ?Já používám bash (na Debianu je sh defaultně dash), má víc funkcí (které ty nevyužiješ, takže klidně sh). Nebo taky nic když ten skript budeš spouštět jako
bash skript.sh
(místo pouhého zadání cesty).
Jo, klidně tak.
udisks --detach /dev/sdb
ztichne a jen bliká ledka. Existuje nějaká možnost jeho opětovného připojení, bez toho, abych musel fyzicky odpojit a připojit USB? Jde mi o to, aby neběžel nepřetržitě, když na to není dělaný.
# odpojení disku (samozřejmě prováním po odmountování) # disk zmizí i z fdisk -l a z blkid:) echo '2-1.1' |sudo tee /sys/bus/usb/drivers/usb/unbind # připojení disku echo '2-1.1' |sudo tee /sys/bus/usb/drivers/usb/bind
1. mount USB disku (pokud není přimountovaný) 2. vytvoření LVM snapshotu (pokud není vytvořený) 3. mount LVM snapshotu (pokud není přimountovaný) 4. rsync záloha LVM snapshotu na USB disk 5. umount LVM snapshotu 6. odstranění LVM snapshotu 7. umount USB diskuA to by mělo být vše. Pokud jakýkoliv krok nedopadne, skript se ukončí a nepokračuje dalším krokem (nic inteligentnějšího mě v tuto chvíli nenapadá:).
0. ověřit, zda je USB disk připojenýTo všechno mám, zdá se, funkční. Takže "jen" tam dodat to ověřování a vytváření/rušení snapshotů. Dostanu se k tomu večer, a čuju, že se zaseknu na tom ověření, zda snapshot existuje:)
#!/bin/sh # UUID USB disku podle blkid UUID="30a8ed74-3d45-4fb1-8d84-3890cb60b0e1" # Snapshot, který se bude zálohovat SNAPSHOT="FOTKY" if ! blkid -U $UUID ; then echo "USB disk není připojen!!!" exit 0 fi if [ ! -d /mnt/usbbackup ] ; then echo "vytváření adresáře pro připojení disku" mkdir /mnt/usbbackup fi echo "dešifrování disku" if ! cryptsetup status -q /dev/mapper/backup ; then cryptsetup luksOpen /dev/disk/by-uuid/$UUID backup fi echo "připojení disku" if ! mountpoint -q /mnt/usbbackup ; then mount /dev/mapper/backup /mnt/usbbackup fi echo "vytvoření snapshotu" if ! lvdisplay /dev/LVM-sda2-sdb2/$SNAPSHOT ; then lvcreate -s -L 1G -n $SNAPSHOT /dev/LVM-sda2-sdb2/$SNAPSHOT fi if [ ! -d /snapshots/$SNAPSHOT ] ; then echo "vytváření adresáře pro připojení snapshotu" mkdir /snapshots/$SNAPSHOT fi echo "připojení snapshotu" if ! mountpoint -q /snapshots/$SNAPSHOT ; then mount /dev/LVM-sda2-sdb2/$SNAPSHOT /snapshots/$SNAPSHOT fi echo "start synchronizace" rsync -a --progress --delete /snapshots/$SNAPSHOT /mnt/usbbackup echo "konec synchonizace" echo "odpojení USB disku" if mountpoint -q /mnt/usbbackup; then umount /mnt/usbbackup && cryptsetup luksClose backup fi echo "odpojení snapshotu" if mountpoint -q /snapshots/$SNAPSHOT ; then umount /snapshots/$SNAPSHOT fi echo "zrušení snapshotu" if lvdisplay /dev/LVM-sda2-sdb2/$SNAPSHOT ; then lvremove -f /dev/LVM-sda2-sdb2/$SNAPSHOT && rmdir /snapshots/$SNAPSHOT fi echo "hotovo!"
./zaloha -s FOTKY
(to "s" je příklad - jako snapshot).
# pro pouziti ./jmenoscriptu jedna dva tri # pouziti paramatru podle poradi echo $1 $2 $3 PROMENA_1="$1" PROMENA_2="$2" PROMENA_3="$3" # pouzti vsech parametru dohromady jako jeden - tedy jako "jedna dva tri" echo $* # pouzti vsech parametru samostatne za sebou - tedy jako "jedna" "dva" "tri" echo $@ # pro "uplnost" -> zobrazeni nazvu scriptu # pouzitelne napr. pokud 1 script toho ma delat vice a chces rozlisovat co ma delat podle nazvu symlinku kterej smeruje na script # tedy napr. script zalohovani, na kterej smeruje symbolickej link zalohu-udelej a zalohu-obnov :) echo $0nebo ti jde opravdu o moznost predavat parametry ktere maji nejakou hodnotu (viz tve -s jmeno_snapshotu) ?
zaloha AVF
, kde AVF by znamenalo, Audio, Video, Foto a přítomnost každého parametru by znamenala, že se záloha provede (popřípadě že bez parametru se provede vše a uvedením parametru to vyloučíš)
#!/bin/bash pripravne_kroky(){ #genericke kroky vyuzivajici predane jmeno parametru v hodnote $1 } uklizeci_kroky(){ #genericke kroky vyuzivajici predane jmeno parametru v hodnote $1 } for snapshot in $@; do pripravne_kroky rsync blabla uklizeci_kroky done
#!/bin/bash pripravne_kroky(){ #genericke kroky vyuzivajici predane jmeno parametru v hodnote $1 } uklizeci_kroky(){ #genericke kroky vyuzivajici predane jmeno parametru v hodnote $1 } for snapshot in $@; do pripravne_kroky ${snapshot} rsync blabla uklizeci_kroky ${snapshot} done
echo "připojení disku - mount" if ! mountpoint -q /mnt/usbbackup ; then mount /dev/mapper/backup /mnt/usbbackup &>/dev/null fi if ! mountpoint -q /mnt/usbbackup ; then echo "připojení disku se nepodařilo (je disk fyzicky připojen v USB?)" echo "KONEC!" exit 0 fiCely muj aktualni skript je v priloze.
mountpoint -q /mnt/usbbackup || (mount /dev/mapper/backup /mnt/usbbackup || (echo "připojení disku se nepodařilo (je disk fyzicky připojen v USB?)"; echo "KONEC!"; exit 0))to same rozdelene pomoci \ na vice radku pro prehlednost
mountpoint -q /mnt/usbbackup || \ (mount /dev/mapper/backup /mnt/usbbackup || \ (echo "připojení disku se nepodařilo (je disk fyzicky připojen v USB?)"; echo "KONEC!"; exit 0))"&>/dev/null" sem vypustil, protoze pokud neni problem tak neni vystup zadnej a pokud je problem, neni dobre to zahazovat ale se podle toho zaridit a/nebo upravovat skript na lepe odchyceni takovych situaci v budoucnu ;)
dalsi duvod je ze "to proste chce" a proc by ne :)No vzhledem k tomu, že první věta vlastního dotazu tazatele je: "Ahojky, svépomocí a hlavně na základě čerpání informací z podobných diskuzí, jako je abclinuxu jsem si rozjel můj první Linux." mi připadalo rozumné uvést kontex a nějaké doporučení. Všichni máme zkušenosti z dotazy začátečníků, kteří "něco chtějí", ale ne vždy je to rozumné, viz jedna z tazatelových reakcí, kdy píše že rozdělení je proto, že je tam několik uživatelů a různí uživatelé se různým způsobem připojují. Ale tohle neošetřuje LVM a rozdělení na oddíly, ale struktura přístupových práv.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.