UFFICIALE L'OT di Linux e altri OS

Fenix27

Utente Attivo
863
220
Ragazzi voi come gestite i vostri backup ? Intendo sia per file personali come musica,foto,lavoro etc ... e come backup del sistema stesso.
Io non ho preso nessuna precauzione e infatti se mai dovesse succedere qualcosa mi ritroverei nella melma :asd:.

Per quanto riguarda i file personali avevo in mente di dare un rsync della mia /home su un HDD esterno che ho.
Invece per il sistema non saprei. Cosa potrebbe tornarmi comodo e utile ? A me servirebbe un qualcosa che mi permettesse di tornare in uno stato precedente con un paio di click e aver il sistema funzionante. Snapshots ? Se si, come ?
 

EmanueleC

Utente Èlite
5,630
1,838
CPU
Ryzen 5 2600x
Dissipatore
stock
Scheda Madre
ROG STRIX B450-F GAMING
HDD
OS: WD BLue SN570 500GB, Dati: 1TB Toshiba p300, Game: 2TB Toshiba P300
RAM
Corsair DDR4 3000 Mhz 2x8 GB
GPU
AMD Radeon RX 6600
PSU
Seasonic Focus Gold 450W
Case
BitFenix Neos
OS
Fedora Linux
Ragazzi voi come gestite i vostri backup ? Intendo sia per file personali come musica,foto,lavoro etc ... e come backup del sistema stesso.
Io non ho preso nessuna precauzione e infatti se mai dovesse succedere qualcosa mi ritroverei nella melma :asd:.

Per quanto riguarda i file personali avevo in mente di dare un rsync della mia /home su un HDD esterno che ho.
Invece per il sistema non saprei. Cosa potrebbe tornarmi comodo e utile ? A me servirebbe un qualcosa che mi permettesse di tornare in uno stato precedente con un paio di click e aver il sistema funzionante. Snapshots ? Se si, come ?
Per i backup dati per adesso sto usando backintime, ma quando ho tempo vorrei provare btrfs send. Per gli snapshot di sistema già si sa cosa uso e come li uso :asd:
Ad oggi sinceramente fare il ripristino di una versione precedente mi è servito solo una volta per un bug non molto grave, un bug audio sul monitor esterno, ho ripristinato la 19.10, ma finito quel che dovevo fare, poi ho ripristinato di nuovo la 20.04.
 

Fenix27

Utente Attivo
863
220
Per i backup dati per adesso sto usando backintime, ma quando ho tempo vorrei provare btrfs send. Per gli snapshot di sistema già si sa cosa uso e come li uso :asd:
Ad oggi sinceramente fare il ripristino di una versione precedente mi è servito solo una volta per un bug non molto grave, un bug audio sul monitor esterno, ho ripristinato la 19.10, ma finito quel che dovevo fare, poi ho ripristinato di nuovo la 20.04.

Btrfs e snapshot ?
 

rebellion

Utente Èlite
1,592
506
CPU
intel i5 9500
Dissipatore
cooler master hyper 212 evo
Scheda Madre
asrock b360 pro4
HDD
samsung 850evo 250GB+samsung 840pro 128GB+seagate barracuda 2TB+seagate barracuda 2TB
RAM
corsair vengeance lpx ddr4 2133MHz 2x4GB CL13
GPU
integrata intel hd graphics 630
Audio
integrata
Monitor
samsung ue55mu6500u
PSU
xfx pro series 550w core edition
Case
mastercooler
OS
archlinux x64 + gnome3.34.1 && windows10 pro x64
Ragazzi voi come gestite i vostri backup ? Intendo sia per file personali come musica,foto,lavoro etc ... e come backup del sistema stesso.
Io non ho preso nessuna precauzione e infatti se mai dovesse succedere qualcosa mi ritroverei nella melma :asd:.

Per quanto riguarda i file personali avevo in mente di dare un rsync della mia /home su un HDD esterno che ho.
Invece per il sistema non saprei. Cosa potrebbe tornarmi comodo e utile ? A me servirebbe un qualcosa che mi permettesse di tornare in uno stato precedente con un paio di click e aver il sistema funzionante. Snapshots ? Se si, come ?
mi sono fatto uno script in python che sfrutta rsync che lancio quando ne sento il bisogno e ci backuppo ciò del quale ne senta il bisogno!:asd:
Codice:
#!/usr/bin/python

####################################
#**********************************#
# Rsync Backup v.1.0               #
#**********************************#
# python3 and gtk3                 #
#**********************************#
# by rebellion                     #
#**********************************#
####################################

import gi,os,shutil,time,sys,getpass
from pathlib import Path
gi.require_version('Gtk', '3.0')
gi.require_version('Vte', '2.91')
from gi.repository import Gtk,Gdk,GLib,Vte

script = sys.argv[0]
if os.popen('ps aux | grep \"[%s]%s\"'% (script[:1], script[1:])).read().count(script) > 1: exit(0)
username = getpass.getuser()

dialog_prov = Gtk.FileChooserDialog(title="BACKUP (rsync): cartella da copiare", parent=None, action=Gtk.FileChooserAction.SELECT_FOLDER)
dialog_prov.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
dialog_prov.add_button(Gtk.STOCK_APPLY, Gtk.ResponseType.APPLY)
dialog_prov.set_default_response(Gtk.ResponseType.APPLY)
dialog_prov.set_current_folder('/home/%s' % username)
exclude = Gtk.CheckButton.new_with_label('exclude')
exclude.show()
dialog_prov.set_extra_widget(exclude)

prov = None
response_prov = None
while not prov and response_prov != -4 and response_prov != 0:
    response_prov = dialog_prov.run()
    prov = dialog_prov.get_filename()
dialog_prov.destroy()

if response_prov == Gtk.ResponseType.APPLY and prov:
    excludes = []
    if exclude.get_active():
        label_exclude = Gtk.Label()
        label_exclude.set_markup('')
        label_exclude.show()
        dialog_exclude = Gtk.FileChooserDialog(title="BACKUP (rsync): cartella/e da escludere", parent=None, action=Gtk.FileChooserAction.SELECT_FOLDER)
        dialog_exclude.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
        dialog_exclude.add_button(Gtk.STOCK_DELETE, Gtk.ResponseType.OK)
        dialog_exclude.add_button(Gtk.STOCK_APPLY, Gtk.ResponseType.APPLY)
        dialog_exclude.set_default_response(Gtk.ResponseType.APPLY)
        dialog_exclude.set_current_folder('%s' % prov)
        dialog_exclude.set_extra_widget(label_exclude)
        initial_folder = '%s' % prov

        def currentFolderChanged(_):
            if not Path(initial_folder) in Path(dialog_exclude.get_current_folder()).parents and initial_folder != dialog_exclude.get_current_folder(): dialog_exclude.set_current_folder('%s' % prov)

        dialog_exclude.connect('current-folder-changed', currentFolderChanged)
        response_exclude = None
        while not response_exclude:
            response_exclude = dialog_exclude.run()
            if response_exclude == Gtk.ResponseType.OK:
                if os.path.basename(dialog_exclude.get_filename()) in excludes:
                    excludes.remove(os.path.relpath(dialog_exclude.get_filename(),prov))
                    response_exclude = None
                else:
                    excludes.append(os.path.relpath(dialog_exclude.get_filename(),prov))
                    response_exclude = None
                label_exclude.set_markup('<b>escluse:</b> <i>'+str(excludes)+'</i>')
        dialog_exclude.destroy()
    dialog_dest = Gtk.FileChooserDialog(title="BACKUP (rsync): cartella di destinazione", parent=None, action=Gtk.FileChooserAction.SELECT_FOLDER)
    dialog_dest.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
    dialog_dest.add_button(Gtk.STOCK_APPLY, Gtk.ResponseType.APPLY)
    dialog_dest.set_default_response(Gtk.ResponseType.APPLY)
    dialog_dest.set_current_folder('/home/%s' % username)

    dest = None
    response_dest = None
    while not dest and response_dest != -4 and response_dest != 0:
        response_dest = dialog_dest.run()
        dest = dialog_dest.get_filename()
    dialog_dest.destroy()
    if response_dest == Gtk.ResponseType.APPLY:
        if dest:
            prov_size = os.popen("du -cs %s | grep totale | awk '{print$1}'" % prov).read().rstrip()
            cmd_string = '","'.join(excludes)
            fileSize = os.popen('rsync -av --exclude={\"%s\",} --dry-run %s %s | fgrep \'total size is\' | awk \'{print$4}\'' % (cmd_string,prov,dest)).read().rstrip()
            destDisk_size = shutil.disk_usage(dest)[2]
            if destDisk_size >= int(prov_size) and fileSize != '0':
                folder_log = os.path.basename(os.path.normpath(prov))
                if not os.path.exists('%s/log/%s' % (dest,folder_log)):
                    os.makedirs('%s/log/%s' % (dest,folder_log))
            window = Gtk.Window()
            window.set_urgency_hint(True)
            window.set_decorated(False)
            window.set_position(Gtk.WindowPosition.CENTER)
            window.set_deletable(True)
            window.set_default_size(500,250)
            window.set_resizable(False)
            window.set_border_width(0)

            def cursorHandOn(_,widget):
                _.get_window().set_cursor(hand_cursor)

            def cursorHandOff(_,widget):
                _.get_window().set_cursor()

            def applyFunc(_):
                applyButton.destroy()
                provDestLabel.destroy()
                vbox.remove(buttonBox)
                window.set_default_size(1000,700)
                vteTerminal = Vte.Terminal()
                vteTerminal.spawn_sync(
                Vte.PtyFlags.DEFAULT,
                    os.environ['HOME'],
                    ["/bin/bash"],
                    [],
                    GLib.SpawnFlags.DO_NOT_REAP_CHILD,
                    None,
                    None,
                )
                textview_scrollable = Gtk.ScrolledWindow()
                textview_scrollable.set_border_width(10)
                textview_scrollable.add(vteTerminal)
                current_time = str(time.localtime()[2])+'-'+str(time.localtime()[1])+'-'+str(time.localtime()[0])+'-'+str(time.localtime()[3])+'h'+str(time.localtime()[4])+'m'
                cmd = 'printf \"\\033c\" ; tput rev ; tput bold ; echo \"::INIZIO BACKUP INCREMENTALE::\" ; tput sgr0 ; echo ; rsync -zvah --exclude={\"%s\",} --delete --stats --info=progress2 %s %s | tee %s/log/%s/Rsync_Backup_%s.log ; echo ; echo \"File di log: %s/log/%s/\" ; echo ; tput bold ; tput blink ; echo \"**BACKUP INCREMENTALE terminato.**\" ; tput sgr0 ; exit\n' % (cmd_string,prov,dest,dest,folder_log,current_time,dest,folder_log)
                commands = bytes('stty echo ; '+cmd, encoding = 'utf-8')
                closeButton.set_margin_bottom(10)
                vbox.pack_start(textview_scrollable,True,True,10)
                vbox.pack_end(buttonBox,False,False,0)
                textview_scrollable.show_all()
                vteTerminal.feed_child(b'stty -echo\n')
                vteTerminal.feed_child(commands)

            hand_cursor = Gdk.Cursor(Gdk.CursorType.HAND2)
            vbox = Gtk.VBox(homogeneous=False)
            headerbar = Gtk.HeaderBar()
            titlebar = Gtk.Label()
            titlebar.set_markup('\n<b><big>BACKUP incrementale</big></b>\n')
            headerbar.set_custom_title(titlebar)
            vbox.pack_start(headerbar,False,False,0)

            provDestLabel = Gtk.Label()
            provDestLabel.set_margin_top(30)
            excludes_items = ''
            if excludes:
                excludes_items = '\n\n<b>CARTELLA/E DA ESCLUDERE</b>'
                for item_excludes in excludes: excludes_items += '\n<i>' + item_excludes + '</i>'
            provDestLabel.set_markup('<b>CARTELLA DA COPIARE</b>\n<i> %s</i>\n\n<b>CARTELLA DI DESTINAZIONE</b>\n<i> %s</i>%s' % (prov,dest,excludes_items))
            buttonBox = Gtk.HBox()
            buttonBox.set_name('buttonbox')
            closeButton = Gtk.Button.new_with_label('CHIUDI')
            closeButton.connect('clicked', Gtk.main_quit)
            closeButton.connect('enter-notify-event', cursorHandOn)
            closeButton.connect('leave-notify-event', cursorHandOff)
            applyButton = Gtk.Button.new_with_label('APPLICA')
            applyButton.connect('clicked', applyFunc)
            applyButton.connect('enter-notify-event', cursorHandOn)
            applyButton.connect('leave-notify-event', cursorHandOff)
            buttonBox.pack_start(applyButton,True,True,10)
            buttonBox.pack_end(closeButton,True,True,10)
            vbox.pack_start(provDestLabel,False,False,0)
            vbox.pack_end(buttonBox,False,False,10)
            window.add(vbox)

            if fileSize == '0':
                applyButton.destroy()
                applyButton = None
                warningLabel = Gtk.Label()
                warningLabel.set_markup("<b><span color='red'>ATTENZIONE: nessuna operazione sui files</span></b>")
                vbox.pack_start(warningLabel,False,False,10)
            elif destDisk_size < int(prov_size):
                if applyButton: applyButton.destroy()
                warningSpaceLabel = Gtk.Label()
                warningSpaceLabel.set_markup("<b><span color='red'>ATTENZIONE: spazio su disco insufficiente</span></b>")
                vbox.pack_start(warningSpaceLabel,False,False,10)

            css = b"""
            @keyframes shadow-pulse {
                0% { box-shadow: 0 0 0 0px rgba(0, 0, 0, 0.2); }
                100% { box-shadow: 0 0 0 25px rgba(0, 0, 0, 0); }
            }
            button:hover {
                border-radius: 30px;
                opacity: 0.8;
                animation: shadow-pulse 1s 1;
            }
            #buttonbox {
                margin-top: 20px;
            }
            """
            style_provider = Gtk.CssProvider()
            style_provider.load_from_data(css)

            Gtk.StyleContext.add_provider_for_screen(
                Gdk.Screen.get_default(),
                style_provider,
                Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
            )

            window.connect("delete-event", Gtk.main_quit)
            window.show_all()
            Gtk.main()
non taciterò il fatto che tutto sia iniziato per non incappare in un mare di mrd@ qualora mi andasse irrimediabilmente a farfalle il sistema, quindi nel testare lo script ho mandato...irrimediabilmente a farfalle il sistema e ho navigato in un mare di roba succitatamente schifosissima per un bel pezzo perdendo un bel po' di roba!!:rock:quindi la morale è: non importa come ma tienti un backup se hai roba sensibile, ragazzo.
 
  • Mi piace
Reazioni: Fenix27

EmanueleC

Utente Èlite
5,630
1,838
CPU
Ryzen 5 2600x
Dissipatore
stock
Scheda Madre
ROG STRIX B450-F GAMING
HDD
OS: WD BLue SN570 500GB, Dati: 1TB Toshiba p300, Game: 2TB Toshiba P300
RAM
Corsair DDR4 3000 Mhz 2x8 GB
GPU
AMD Radeon RX 6600
PSU
Seasonic Focus Gold 450W
Case
BitFenix Neos
OS
Fedora Linux

Zar Marco

Utente Attivo
501
108
CPU
Intel i7 1165G7 - Intel I7 7700HQ
HDD
Sabrent Rocket 1TB NVMe - Samsung M2 960 EVO NVMe 500GB, SSD Samsung 860 evo 1 Tb
RAM
16GbDDR4 4266 Mhz - 24 Gb DDR4 2400 Mhz
GPU
Intel iris XE - Intel 620, Nvidia GTX 1050
OS
Arch Linux--Gentoo--Void--Fedora--Nixos--Windows
Ragazzi, scusate la domanda nubbia ma, se io voglio crearmi una partizione condivisa tra più distro Linux, in maniera che sia accessibile da tutte, creo la partizione, la inserisco in fstab e la monto. Ma come posso renderla accessibile in lettura e scrittura per tutti gli users? Tenete presente che nelle tre distro con cui mi diletto, il nome utente è sempre lo stesso. Ogni distro ha la sua home separata

Inviato da MI 9 tramite App ufficiale di Tom\'s Hardware Italia Forum
 

EmanueleC

Utente Èlite
5,630
1,838
CPU
Ryzen 5 2600x
Dissipatore
stock
Scheda Madre
ROG STRIX B450-F GAMING
HDD
OS: WD BLue SN570 500GB, Dati: 1TB Toshiba p300, Game: 2TB Toshiba P300
RAM
Corsair DDR4 3000 Mhz 2x8 GB
GPU
AMD Radeon RX 6600
PSU
Seasonic Focus Gold 450W
Case
BitFenix Neos
OS
Fedora Linux
Ragazzi, scusate la domanda nubbia ma, se io voglio crearmi una partizione condivisa tra più distro Linux, in maniera che sia accessibile da tutte, creo la partizione, la inserisco in fstab e la monto. Ma come posso renderla accessibile in lettura e scrittura per tutti gli users? Tenete presente che nelle tre distro con cui mi diletto, il nome utente è sempre lo stesso. Ogni distro ha la sua home separata

Inviato da MI 9 tramite App ufficiale di Tom\'s Hardware Italia Forum
chown -R utente:utente /cartella
Ovviamente è valido se il nome utente è uguale.
 

Fenix27

Utente Attivo
863
220

Le istantanee le tieni in un HDD esterno ? Quindi una volta che hai creato l'istantanea e hai bisogno di fare un rollback attacchi l'HDD e premendo su Restore ritorni allo stato della instantanea ?

mi sono fatto uno script in python che sfrutta rsync che lancio quando ne sento il bisogno e ci backuppo ciò del quale ne senta il bisogno!:asd:
Codice:
#!/usr/bin/python

####################################
#**********************************#
# Rsync Backup v.1.0               #
#**********************************#
# python3 and gtk3                 #
#**********************************#
# by rebellion                     #
#**********************************#
####################################

import gi,os,shutil,time,sys,getpass
from pathlib import Path
gi.require_version('Gtk', '3.0')
gi.require_version('Vte', '2.91')
from gi.repository import Gtk,Gdk,GLib,Vte

script = sys.argv[0]
if os.popen('ps aux | grep \"[%s]%s\"'% (script[:1], script[1:])).read().count(script) > 1: exit(0)
username = getpass.getuser()

dialog_prov = Gtk.FileChooserDialog(title="BACKUP (rsync): cartella da copiare", parent=None, action=Gtk.FileChooserAction.SELECT_FOLDER)
dialog_prov.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
dialog_prov.add_button(Gtk.STOCK_APPLY, Gtk.ResponseType.APPLY)
dialog_prov.set_default_response(Gtk.ResponseType.APPLY)
dialog_prov.set_current_folder('/home/%s' % username)
exclude = Gtk.CheckButton.new_with_label('exclude')
exclude.show()
dialog_prov.set_extra_widget(exclude)

prov = None
response_prov = None
while not prov and response_prov != -4 and response_prov != 0:
    response_prov = dialog_prov.run()
    prov = dialog_prov.get_filename()
dialog_prov.destroy()

if response_prov == Gtk.ResponseType.APPLY and prov:
    excludes = []
    if exclude.get_active():
        label_exclude = Gtk.Label()
        label_exclude.set_markup('')
        label_exclude.show()
        dialog_exclude = Gtk.FileChooserDialog(title="BACKUP (rsync): cartella/e da escludere", parent=None, action=Gtk.FileChooserAction.SELECT_FOLDER)
        dialog_exclude.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
        dialog_exclude.add_button(Gtk.STOCK_DELETE, Gtk.ResponseType.OK)
        dialog_exclude.add_button(Gtk.STOCK_APPLY, Gtk.ResponseType.APPLY)
        dialog_exclude.set_default_response(Gtk.ResponseType.APPLY)
        dialog_exclude.set_current_folder('%s' % prov)
        dialog_exclude.set_extra_widget(label_exclude)
        initial_folder = '%s' % prov

        def currentFolderChanged(_):
            if not Path(initial_folder) in Path(dialog_exclude.get_current_folder()).parents and initial_folder != dialog_exclude.get_current_folder(): dialog_exclude.set_current_folder('%s' % prov)

        dialog_exclude.connect('current-folder-changed', currentFolderChanged)
        response_exclude = None
        while not response_exclude:
            response_exclude = dialog_exclude.run()
            if response_exclude == Gtk.ResponseType.OK:
                if os.path.basename(dialog_exclude.get_filename()) in excludes:
                    excludes.remove(os.path.relpath(dialog_exclude.get_filename(),prov))
                    response_exclude = None
                else:
                    excludes.append(os.path.relpath(dialog_exclude.get_filename(),prov))
                    response_exclude = None
                label_exclude.set_markup('<b>escluse:</b> <i>'+str(excludes)+'</i>')
        dialog_exclude.destroy()
    dialog_dest = Gtk.FileChooserDialog(title="BACKUP (rsync): cartella di destinazione", parent=None, action=Gtk.FileChooserAction.SELECT_FOLDER)
    dialog_dest.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
    dialog_dest.add_button(Gtk.STOCK_APPLY, Gtk.ResponseType.APPLY)
    dialog_dest.set_default_response(Gtk.ResponseType.APPLY)
    dialog_dest.set_current_folder('/home/%s' % username)

    dest = None
    response_dest = None
    while not dest and response_dest != -4 and response_dest != 0:
        response_dest = dialog_dest.run()
        dest = dialog_dest.get_filename()
    dialog_dest.destroy()
    if response_dest == Gtk.ResponseType.APPLY:
        if dest:
            prov_size = os.popen("du -cs %s | grep totale | awk '{print$1}'" % prov).read().rstrip()
            cmd_string = '","'.join(excludes)
            fileSize = os.popen('rsync -av --exclude={\"%s\",} --dry-run %s %s | fgrep \'total size is\' | awk \'{print$4}\'' % (cmd_string,prov,dest)).read().rstrip()
            destDisk_size = shutil.disk_usage(dest)[2]
            if destDisk_size >= int(prov_size) and fileSize != '0':
                folder_log = os.path.basename(os.path.normpath(prov))
                if not os.path.exists('%s/log/%s' % (dest,folder_log)):
                    os.makedirs('%s/log/%s' % (dest,folder_log))
            window = Gtk.Window()
            window.set_urgency_hint(True)
            window.set_decorated(False)
            window.set_position(Gtk.WindowPosition.CENTER)
            window.set_deletable(True)
            window.set_default_size(500,250)
            window.set_resizable(False)
            window.set_border_width(0)

            def cursorHandOn(_,widget):
                _.get_window().set_cursor(hand_cursor)

            def cursorHandOff(_,widget):
                _.get_window().set_cursor()

            def applyFunc(_):
                applyButton.destroy()
                provDestLabel.destroy()
                vbox.remove(buttonBox)
                window.set_default_size(1000,700)
                vteTerminal = Vte.Terminal()
                vteTerminal.spawn_sync(
                Vte.PtyFlags.DEFAULT,
                    os.environ['HOME'],
                    ["/bin/bash"],
                    [],
                    GLib.SpawnFlags.DO_NOT_REAP_CHILD,
                    None,
                    None,
                )
                textview_scrollable = Gtk.ScrolledWindow()
                textview_scrollable.set_border_width(10)
                textview_scrollable.add(vteTerminal)
                current_time = str(time.localtime()[2])+'-'+str(time.localtime()[1])+'-'+str(time.localtime()[0])+'-'+str(time.localtime()[3])+'h'+str(time.localtime()[4])+'m'
                cmd = 'printf \"\\033c\" ; tput rev ; tput bold ; echo \"::INIZIO BACKUP INCREMENTALE::\" ; tput sgr0 ; echo ; rsync -zvah --exclude={\"%s\",} --delete --stats --info=progress2 %s %s | tee %s/log/%s/Rsync_Backup_%s.log ; echo ; echo \"File di log: %s/log/%s/\" ; echo ; tput bold ; tput blink ; echo \"**BACKUP INCREMENTALE terminato.**\" ; tput sgr0 ; exit\n' % (cmd_string,prov,dest,dest,folder_log,current_time,dest,folder_log)
                commands = bytes('stty echo ; '+cmd, encoding = 'utf-8')
                closeButton.set_margin_bottom(10)
                vbox.pack_start(textview_scrollable,True,True,10)
                vbox.pack_end(buttonBox,False,False,0)
                textview_scrollable.show_all()
                vteTerminal.feed_child(b'stty -echo\n')
                vteTerminal.feed_child(commands)

            hand_cursor = Gdk.Cursor(Gdk.CursorType.HAND2)
            vbox = Gtk.VBox(homogeneous=False)
            headerbar = Gtk.HeaderBar()
            titlebar = Gtk.Label()
            titlebar.set_markup('\n<b><big>BACKUP incrementale</big></b>\n')
            headerbar.set_custom_title(titlebar)
            vbox.pack_start(headerbar,False,False,0)

            provDestLabel = Gtk.Label()
            provDestLabel.set_margin_top(30)
            excludes_items = ''
            if excludes:
                excludes_items = '\n\n<b>CARTELLA/E DA ESCLUDERE</b>'
                for item_excludes in excludes: excludes_items += '\n<i>' + item_excludes + '</i>'
            provDestLabel.set_markup('<b>CARTELLA DA COPIARE</b>\n<i> %s</i>\n\n<b>CARTELLA DI DESTINAZIONE</b>\n<i> %s</i>%s' % (prov,dest,excludes_items))
            buttonBox = Gtk.HBox()
            buttonBox.set_name('buttonbox')
            closeButton = Gtk.Button.new_with_label('CHIUDI')
            closeButton.connect('clicked', Gtk.main_quit)
            closeButton.connect('enter-notify-event', cursorHandOn)
            closeButton.connect('leave-notify-event', cursorHandOff)
            applyButton = Gtk.Button.new_with_label('APPLICA')
            applyButton.connect('clicked', applyFunc)
            applyButton.connect('enter-notify-event', cursorHandOn)
            applyButton.connect('leave-notify-event', cursorHandOff)
            buttonBox.pack_start(applyButton,True,True,10)
            buttonBox.pack_end(closeButton,True,True,10)
            vbox.pack_start(provDestLabel,False,False,0)
            vbox.pack_end(buttonBox,False,False,10)
            window.add(vbox)

            if fileSize == '0':
                applyButton.destroy()
                applyButton = None
                warningLabel = Gtk.Label()
                warningLabel.set_markup("<b><span color='red'>ATTENZIONE: nessuna operazione sui files</span></b>")
                vbox.pack_start(warningLabel,False,False,10)
            elif destDisk_size < int(prov_size):
                if applyButton: applyButton.destroy()
                warningSpaceLabel = Gtk.Label()
                warningSpaceLabel.set_markup("<b><span color='red'>ATTENZIONE: spazio su disco insufficiente</span></b>")
                vbox.pack_start(warningSpaceLabel,False,False,10)

            css = b"""
            @keyframes shadow-pulse {
                0% { box-shadow: 0 0 0 0px rgba(0, 0, 0, 0.2); }
                100% { box-shadow: 0 0 0 25px rgba(0, 0, 0, 0); }
            }
            button:hover {
                border-radius: 30px;
                opacity: 0.8;
                animation: shadow-pulse 1s 1;
            }
            #buttonbox {
                margin-top: 20px;
            }
            """
            style_provider = Gtk.CssProvider()
            style_provider.load_from_data(css)

            Gtk.StyleContext.add_provider_for_screen(
                Gdk.Screen.get_default(),
                style_provider,
                Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
            )

            window.connect("delete-event", Gtk.main_quit)
            window.show_all()
            Gtk.main()
non taciterò il fatto che tutto sia iniziato per non incappare in un mare di mrd@ qualora mi andasse irrimediabilmente a farfalle il sistema, quindi nel testare lo script ho mandato...irrimediabilmente a farfalle il sistema e ho navigato in un mare di roba succitatamente schifosissima per un bel pezzo perdendo un bel po' di roba!!:rock:quindi la morale è: non importa come ma tienti un backup se hai roba sensibile, ragazzo.

Infatti sto pomeriggio lancio rsync di /home sull'HDD esterno da 1TB.
 

EmanueleC

Utente Èlite
5,630
1,838
CPU
Ryzen 5 2600x
Dissipatore
stock
Scheda Madre
ROG STRIX B450-F GAMING
HDD
OS: WD BLue SN570 500GB, Dati: 1TB Toshiba p300, Game: 2TB Toshiba P300
RAM
Corsair DDR4 3000 Mhz 2x8 GB
GPU
AMD Radeon RX 6600
PSU
Seasonic Focus Gold 450W
Case
BitFenix Neos
OS
Fedora Linux
Le istantanee le tieni in un HDD esterno ? Quindi una volta che hai creato l'istantanea e hai bisogno di fare un rollback attacchi l'HDD e premendo su Restore ritorni allo stato della instantanea ?



Infatti sto pomeriggio lancio rsync di /home sull'HDD esterno da 1TB.
No, le istantanee Btrfs risiedono sullo stesso disco, però potrei portarli su hard disk esterno, in effetti con Btrfs send. Basta che premo restore e in modo istantaneo ho già il restore, bisogna solo riavviare. Se la macchina non può essere avviata, allora in quel caso, avvii una live, timeshift e ripristini.
Ho fatto una dimostrazione per far capire meglio come funziona, in questo caso ho simulato la rimozione della cartella di "/boot" e quindi nella peggior situazione quando il sistema non è avviabile.
 
  • Mi piace
Reazioni: Fenix27

Zar Marco

Utente Attivo
501
108
CPU
Intel i7 1165G7 - Intel I7 7700HQ
HDD
Sabrent Rocket 1TB NVMe - Samsung M2 960 EVO NVMe 500GB, SSD Samsung 860 evo 1 Tb
RAM
16GbDDR4 4266 Mhz - 24 Gb DDR4 2400 Mhz
GPU
Intel iris XE - Intel 620, Nvidia GTX 1050
OS
Arch Linux--Gentoo--Void--Fedora--Nixos--Windows
chown -R utente:utente /cartella
Ovviamente è valido se il nome utente è uguale.
Si, ho fatto così, ma poi per poter interagire in quella cartella tra una distro e l'altra posso farlo solo con sudo. La partizione l'ho montata in una cartella creata dentro alla home. Tale partizione in realtà è un subvolume di btrfs

Inviato da MI 9 tramite App ufficiale di Tom\'s Hardware Italia Forum
 

EmanueleC

Utente Èlite
5,630
1,838
CPU
Ryzen 5 2600x
Dissipatore
stock
Scheda Madre
ROG STRIX B450-F GAMING
HDD
OS: WD BLue SN570 500GB, Dati: 1TB Toshiba p300, Game: 2TB Toshiba P300
RAM
Corsair DDR4 3000 Mhz 2x8 GB
GPU
AMD Radeon RX 6600
PSU
Seasonic Focus Gold 450W
Case
BitFenix Neos
OS
Fedora Linux
Si, ho fatto così, ma poi per poter interagire in quella cartella tra una distro e l'altra posso farlo solo con sudo. La partizione l'ho montata in una cartella creata dentro alla home. Tale partizione in realtà è un subvolume di btrfs

Inviato da MI 9 tramite App ufficiale di Tom\'s Hardware Italia Forum
Dovresti allora farlo iniziando dal subvol, che è una cartella, monti la radice e dovresti vedere il subvol, ad esempio "@dati" o come lo hai rinominato, poi chown -R utente:utente @cartellasubvolume e poi smonti
Un esempio sulla mia configurazione:
Codice:
emanu@emanuc:~$ sudo mount -t btrfs -o noatime,compress=zstd /dev/sda2 /mnt
[sudo] password di emanu:
emanu@emanuc:~$ ls /mnt
@  @home  @swap  timeshift-btrfs  @varlibflatpak
 

r3dl4nce

Utente Èlite
16,578
9,029
Devi creare utente con uid e gid uguali in ogni distro che usi, contano quelli più che il nome utente (che è un'associazione con l'uid e il gid nei file passwd e group)
 

Fenix27

Utente Attivo
863
220
No, le istantanee Btrfs risiedono sullo stesso disco, però potrei portarli su hard disk esterno, in effetti con Btrfs send. Basta che premo restore e in modo istantaneo ho già il restore, bisogna solo riavviare. Se la macchina non può essere avviata, allora in quel caso, avvii una live, timeshift e ripristini.
Ho fatto una dimostrazione per far capire meglio come funziona, in questo caso ho simulato la rimozione della cartella di "/boot" e quindi nella peggior situazione quando il sistema non è avviabile.

Sta sera vedo il video. Comunque non è "pericoloso" tenere l'istantanea sullo stesso disco ?
 

EmanueleC

Utente Èlite
5,630
1,838
CPU
Ryzen 5 2600x
Dissipatore
stock
Scheda Madre
ROG STRIX B450-F GAMING
HDD
OS: WD BLue SN570 500GB, Dati: 1TB Toshiba p300, Game: 2TB Toshiba P300
RAM
Corsair DDR4 3000 Mhz 2x8 GB
GPU
AMD Radeon RX 6600
PSU
Seasonic Focus Gold 450W
Case
BitFenix Neos
OS
Fedora Linux
Sta sera vedo il video. Comunque non è "pericoloso" tenere l'istantanea sullo stesso disco ?
L'istantanea non è un backup anche perché è della sola radice (/), quindi no. Sulla home dove ci sono i dati utente ho un subvolume che su Ubuntu viene creato in automatico, quindi escluso dallo snapshot altrimenti al ripristino perderesti i dati scritti dopo lo snapshot (altro vantaggio di Btrfs sono appunto i subvolume), quindi no.
Ed ecco perché ho creato un altro subvolume per le applicazioni flatpak, per lo stesso motivo, senza creare mille partizioni.
Come vedi la partizione della radice dell'SSD è sda2, sdb1 è la partizione del disco (hard disk da 1TB) dati:
/dev/sda2 on / type btrfs (rw,noatime,compress=zstd:1,ssd,space_cache,autodefrag,subvolid=839,subvol=/@) (Creo lo snapshot solo di questo subvolume)
/dev/sda2 on /swap type btrfs (rw,relatime,compress=zstd:1,ssd,space_cache,autodefrag,subvolid=810,subvol=/@swap) (subvolume dove c'è lo swapfile)
/dev/sda2 on /home type btrfs (rw,noatime,compress=zstd:1,ssd,space_cache,autodefrag,subvolid=258,subvol=/@home) (subvolume della home dove ci sono i dati utente)
/dev/sda2 on /var/lib/flatpak type btrfs (rw,noatime,compress=zstd:1,ssd,space_cache,autodefrag,subvolid=841,subvol=/@varlibflatpak) (subvolume delle applicazioni flatpak)
/dev/sdb1 on /media/emanu/dati/game type btrfs (rw,noatime,compress=zstd:3,space_cache,autodefrag,subvolid=1435,subvol=/@game) (subvolume dove c'è la cartella steam, che voglio escludere un domani quando userò btrfs send per trasferirlo su disco di backup)
/dev/sdb1 on /media/emanu/dati/dati type btrfs (rw,noatime,compress=zstd:3,space_cache,autodefrag,subvolid=1411,subvol=/@dati) (subvolume che userò per btrfs send per i backup su disco esterno)
 
Ultima modifica:
  • Mi piace
Reazioni: Fenix27

Fenix27

Utente Attivo
863
220
L'istantanea non è un backup anche perché è della sola radice (/), quindi no. Sulla home dove ci sono i dati utente ho un subvolume che su Ubuntu viene creato in automatico, quindi escluso dallo snapshot altrimenti al ripristino perderesti i dati scritti dopo lo snapshot (altro vantaggio di Btrfs sono appunto i subvolume), quindi no.
Ed ecco perché ho creato un altro subvolume per le applicazioni flatpak, per lo stesso motivo, senza creare mille partizioni.
Come vedi la partizione della radice dell'SSD è sda2, sdb1 è la partizione del disco (hard disk da 1TB) dati:

Quindi quando si parla di gestione snapshots si parla di catturare l'istantanea solo della root giusto ?
In teoria potevi anche non gestire /dev/sdb1 come subvolume e tenerlo come semplice secondo disco fisico (e quindi 1 partizione) ?
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili