Helló,

vagy egy könyvtáram, benne 100.000+ alkönyvtárral. Ha itt új könyvtár jön létre, vagy egy meglévő tartalma módosul, szeretném azt átmásolni egy másik kiszolgálóra, ahonnan egyébként 1 hét után törlöm.
A klasszikus szinkron megoldások nem feltétlenül jók, mert nem kell a 100.000+ könyvtárat átmásolni.
Próbáltam a find + cp párost ami azért nem jó, mert nagyon sok időt vesz igénybe míg a find megtalálja a friss elemeket.
Valami olyasmi kellene ami figyeli a fájlrendszer eseményeket a könyvtáramban, és visszaadja az új vagy módosult könyvtár nevét, amit aztán át tudok másolni. Persze fontos az is, hogy a megoldás ne fogyasszon túl sok erőforrást.
Van ötletetek, megoldási javaslatotok?

Köszi!

    gmac Az egyik ötletem a Seafile server és kliens használata.
    Pontosan azt csinálja, hogy kliens oldalon (a gépeden) a szinkronizált könyvtárat a szerveren egy kötetbe másolja.
    Ha törölsz, onnan is törli. Szerver oldali beállítás, hogy törölt elem meddig legyen visszaállítható, illetve ha valamiből újabb került oda (például beleírtál egy dokumentumba), a régebbi változatból hány verzió maradjon meg?
    A másik ötletem az rsync használata, amit időről időre lefuttatnál. Esetleg inotifywait-szerűségektől függővé tenni az rsync futását, de ilyenbe még nem mélyedtem, ha te akarsz, akkor induláshoz ebbe az irányba kutakodj:
    https://stackoverflow.com/questions/7542430/inotify-and-bash

    • gmac válaszolt erre.
      1. Keresse meg a módosított fájlokat az elmúlt 1 órában
        Az elmúlt 1 órában módosított összes fájl megkereséséhez .
        # find / -mmin -60
        https://www.tecmint.com/35-practical-examples-of-linux-find-command/
      • gmac válaszolt erre.

        klt Köszönöm a tanácsot. A Seafile tud olyat, hogy csak egy adott időszakon belül módosított fájlokat szinkronizálja? A cél az lenne, hogy a távoli gépen mindig csak az elmúlt hét könyvtárai legyenek elérhetők. A helyi gépen ott van minden (100.000+ könyvtár) de a távolin csak kb. 50 könyvtár látszik (ami folyamatosan változik).

        • klt válaszolt erre.

          aaa0 Ahogy kérdésemben leírtam, a find nem jó megoldás mert sok időt vesz igénybe, míg átnézi a 100.000+ könyvtárat és megkeresi azokat amik megfelelnek a kritériumnak.

          • klt válaszolt erre.

            gmac Seafile tud olyat, hogy csak egy adott időszakon belül módosított fájlokat

            Nem, az mindent szinkronizál. Viszont onnantól, hogy egyszer leszinkronizálta a kötetet, bármilyen nagy az adatterület, ha a változás kicsi, akkor azt gyorsan szinkronizálja. Például, a dokumentumok könyvtáramban van a tree -a szerint
            9952 directories, 75571 files
            Ha létrehozok egy új valamit, pár másodpercen belül a szerveren van, és 1 percen belül a másik gépemen, ahol szintén szinkronizált a dokumentumok könyvtáram.
            Az első, kezdeti szinkronizálás hosszú.

            Esetleg elmeséled, hogy milyen feladatot oldasz meg? Mert nem biztos, hogy a Seafile tényleg jó lesz neked.

            • gmac válaszolt erre.

              klt A feladat az, hogy a folyamatosan bővülő, változó könyvtárakból a legfrissebbeket egy alternatív helyen is elérhetővé kell tenni. Nincs szükség (sőt!) arra, hogy a teljes adattartalom elérhető legyen a másik helyen, mindig csak a legfrissebbekre van szükség. Napi szinten kb 30 könyvtárral bővül az állomány és kb 20 régiben frissülnek a fájlok. Ezt az 50 könyvtárat kell átmásolni a másik helyre, ahol maximum egy hétig lehetnek elérhetők (ezért írtam, hogy egy hét után törlöm őket). Ezt persze naponta többször meg kell tenni, hogy a lehető legaktuálisabb legyen az alternatív helyen a tartalom.
              A snyc eljárásokkal az volt a bajon, hogy azok szinkronizálnak 🙂 Ha én a célhelyen törölöm a fájlt, akkor újból odamásolják és ez nekem nem jó. Ezért gondoltam arra, hogy figyelem a fájlrendszer eseményeit és ha engem érintő változás van akkor lereagálom.

              klt Köszi a tippet, ki fogom próbálni.

              • klt kedveli ezt.

              Hali!
              Talán ez a kis script azt csinálja amit szeretnél:
              (lehet telepíteni kell az inotify-tools csomagot: sudo apt install inotify-tools)

              #!/bin/bash
              
              inotifywait -m /az/ellenorizni/kivant/utvonal/ -e create -e move -e close_write -r | # -m mint --monitor, -e mint --event vagyis esemény
                  while read path action file; do
                          echo ${path}${file} 
                          echo ${action}        # erre nem feltétlenül lesz szükséged, csak érdekesség képpen
                          cp ${path}${file}  ....... # A másolás folyamatát rád bízom
                          echo 'másolva: '${path}${file} 
                  done

              Nem tudom elég gyors lesz e? Szerintem igen.
              Az "-e" paraméterekből ennél kicsit több lehetőség is van:
              https://linux.die.net/man/1/inotifywait

                sömike ...és ha tényleg olyan nagyon sok izé-bizét kell figyelgetni, akkor lehet, hogy szükség lesz egy kis rendszerpitiszkálásra:

                echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
                sudo sysctl -p

                https://unix.stackexchange.com/questions/13751/kernel-inotify-watch-limit-reached

                Futottam már bele ebbe....

                  klt
                  Erre nem gondoltam, de azért mert ennyire nem is értek hozzá, hogy ilyet is lehet. Ezzel együtt úgy gondolom, hogy így már mindenképp jól kell teljesítenie.
                  Extra: Örülök, hogy Te is jó iránynak gondolod ezt a megoldást.

                  • klt válaszolt erre.
                  • klt kedveli ezt.

                    sömike Nálam a Seafile kliens csapta le a biztosítékot az elején (merítette ki az inotify_watches-t), mert nem 3 fájl van rábízva, ezért emlékszem rá. Azóta ez a beállítás alap a gépeimen, és eddig ezzel nem volt baj.
                    A harmadik ötletem is hasonló elképzelésen alapult, mint a tied, csak nem volt kedvem belemélyedni jobban a szkriptelésbe, mint neked.. Lustaság fél egészség! 🤣

                    Ennyivel később: 6 nap

                    Ha már Seafile, gondoltam megemlítem, hogy sync témakörben sikeresen használom a Syncthing-et. 1,5 millió fájlt tartok szinkronban vele közel 2TB összméretben. Remekül dolgozik, nem volt még erőforrás gondom. Igaz nem aktív egész nap, csak az üresjáratokban indul el és akkor hozza szinkronba a két oldalt. A témához persze nem jó, mert nincs benne időkorlátozás (ahogy kb semmiben sincs).
                    A végső megoldás egyébként az lett, hogy nem szinkronizálunk automatikusan semmit sem. Kézzel kell megtenni szükség esetén. Minden más megoldás nagyon lassú volt a sok fájl miatt.

                    • klt kedveli ezt.
                    Ennyivel később: egy év