Syncronisation der .qcow2 im Betriebssystem

Hallo Zusammen,
wir haben an einer Schule extrem viele Notebooks, die wir „irgendwie“ gerne über WLAN-Syncen wollen. Eine Variante dazu, die ich heute „zusammengebastelt“ habe sieht etwa so aus:

  1. Samba-Freigabe meines Images
root@server:~# cat /etc/samba/smb.conf.admin
# …
[mate-20-image]
path = /srv/linbo/images/mate-20
public = yes
writable = no
comment = freigabe fuer onlinesync
printable = no
guest ok = yes
root@server:~# 
  1. im Linuxclient wird screen + rtorrent benötigt:
    apt install rtorrent screen

  2. folgendes Skript starte ich mittels Crontab beim Start des Gerätes

linuxadmin@master-mate:/mnt/cache$ cat /etc/linuxmuster-linuxclient7/offlinesync.sh 
#!/bin/bash

#1. Mount /cache + Mount samba-share
sudo mount //server/mate-20-image /mnt/mate-20-image -o guest
sudo mount /dev/sda2 /mnt/cache

#2 start torrent
screen -S torrent -d -m bash -c 'rtorrent'

~                                                                               
~                         

  1. unter /root/.rtorrent.rc
root@master-mate:~# cat .rtorrent.rc 
#############################################################################
# This is an (old) example resource file for rTorrent.
# Copy to ~/.rtorrent.rc and enable/modify the options as needed.
# Remember to uncomment the options you wish to enable.
#
# See 'rtorrent.rc-example' for a newer, basic configuration.
#
#   Sample: https://github.com/rakshasa/rtorrent/wiki/CONFIG-Template
# Complete: https://rtorrent-docs.readthedocs.io/en/latest/cmd-ref.html
#   Useful: https://rtorrent-docs.readthedocs.io/en/latest/use-cases.html
#   Manual: https://rtorrent-docs.readthedocs.io/en/latest/
#  Convert: https://github.com/rakshasa/rtorrent/wiki/rTorrent-0.9-Comprehensive-Command-list-(WIP)
# Handbook: https://media.readthedocs.org/pdf/rtorrent-docs/latest/rtorrent-docs.pdf
#     File: https://github.com/rakshasa/rtorrent/blob/master/doc/rtorrent.rc
#############################################################################

# Maximum and minimum number of peers to connect to per torrent.
#
#throttle.min_peers.normal.set = 40
#throttle.max_peers.normal.set = 100

# Same as above but for seeding completed torrents.
# "-1" = same as downloading.
#
#throttle.min_peers.seed.set = 10
#throttle.max_peers.seed.set = 50

# Maximum number of simultaneous uploads per torrent.
#
#throttle.max_uploads.set = 15

# Global upload and download rate in KiB.
# "0" for unlimited.
#
#throttle.global_down.max_rate.set_kb = 0
#throttle.global_up.max_rate.set_kb = 0

# Default directory to save the downloaded torrents.
#
**directory.default.set = /mnt/cache**

# Default session directory. Make sure you don't run multiple instance
# of rTorrent using the same session directory. Perhaps using a
# relative path?
#
#session.path.set = ./session

# Watch a directory for new torrents, and stop those that have been
# deleted.
#
schedule2 = watch_directory,5,5,load.start=/mnt/mate-20-image/*.torrent

# Close torrents when disk-space is low.
#
#schedule2 = low_diskspace,5,60,close_low_diskspace=100M

# The IP address reported to the tracker.
#
#network.local_address.set = 127.0.0.1
#network.local_address.set = rakshasa.no

# The IP address the listening socket and outgoing connections is
# bound to.
#
#network.bind_address.set = 127.0.0.1
#network.bind_address.set = rakshasa.no

# Port range to use for listening.
#
#network.port_range.set = 6890-6999

# Start opening ports at a random position within the port range.
#
#network.port_random.set = no

# Check hash for finished torrents. Might be useful until the bug is
# fixed that causes lack of disk-space not to be properly reported.
#
#pieces.hash.on_completion.set = no

# Set whether the client should try to connect to UDP trackers.
#
#trackers.use_udp.set = yes

# Alternative calls to bind and IP that should handle dynamic IP's.
#
#schedule2 = ip_tick,0,1800,ip=rakshasa
#schedule2 = bind_tick,0,1800,bind=rakshasa

# Encryption options, set to none (default) or any combination of the following:
# allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext
#
# The example value allows incoming encrypted connections, starts unencrypted
# outgoing connections but retries with encryption if they fail, preferring
# plain-text to RC4 encryption after the encrypted handshake.
#
# protocol.encryption.set = allow_incoming,enable_retry,prefer_plaintext

# Enable DHT support for trackerless torrents or when all trackers are down.
# May be set to "disable" (completely disable DHT), "off" (do not start DHT),
# "auto" (start and stop DHT as needed), or "on" (start DHT immediately).
# The default is "off". For DHT to work, a session directory must be defined.
#
# dht.mode.set = auto

# UDP port to use for DHT.
#
#dht.port.set = 6881

# Enable peer exchange (for torrents not marked private).
#
#protocol.pex.set = yes

# Set download list layout style ("full", "compact").
#
#ui.torrent_list.layout.set = "full"

# Run rTorrent as a daemon, controlled via XMLRPC.
#
#system.daemon.set = false

# SCGI Connectivity (for alternative rtorrent interfaces, XMLRPC)
# Use a IP socket with scgi_port, or a Unix socket with scgi_local.
# schedule can be used to set permissions on the unix socket.
#
#network.scgi.open_port = "127.0.0.1:5000"
#network.scgi.open_local = (cat,(session.path),/rpc.sock)
#schedule2 = socket_chmod, 0, 0, "execute.nothrow=chmod,770,(cat,(session.path),/rpc.sock)"
root@master-mate:~# 

jetzt sollten folgende Dinge passieren:

  • beim starten des Geräts werden /cache und samba → image gemountet.
  • wenn dort eine neue .torrent-datei vorhanden ist, wird das .qcow2 in /cache geladen
  • anschließend kann man ein Gerät mit neuem Abbild syncen, obwohl es nicht mit Kabelnetzwerk verbunden ist

Was ich nicht so gut finde (aber naja, eigentlich wollte ich heute Brücktage machen):

  • das ganze läuft als root, besser wäre wenn man für diese funktion einen Nutzer anlegt
  • unter NVME lässt sich das Medium vermutlich nicht mounten. (dirty workaround: oben einfach gleiches aufführen)

Findet das jemand besonders doof das so zu machen? Gibt es Einwände/Verbesserungsvorschläge?

Ein Hinweis:

Du brauchst nicht extra ein Samba share machen. Du kannst einfah rsync benutzen, so wie Linbo selbst auch :slight_smile:

Das Image besser über torrent holen, den Rest mit rsync. Mit torrent lässt sich die Bandbreite beschränken, rsync schnappt sich immer alles, was es an Bandbreite kriegen kann. Tatsächlich ist dazu kein extra Share notwendig. Allerdings wird solange die Notebooks Images übers WLAN ziehen dieses für weitere Anwendungen wenn überhaupt nur eingeschränkt benutzbar sein.

VG, Thomas

Danke euch beiden:

Wie dann die Torrentdatei bekommen?

Hm… meinst du wegen den Datenraten? Man könnte ja auch in der rtorrent-ConfigDatei ein Limit festlegen.

Z.Bsp. so:
rsync --exclude=mate20.qcow2 10.0.0.1::linbo/images/mate-20/mate-20.* /cache

Wie du das Limit am Besten setzt, musst du halt austesten.

VG, Thomas