Mam drzewo katalogów, które chciałbym utworzyć na dyskach optycznych. Niestety przekracza rozmiar dowolnego dysku (około 60 GB). Szukam skryptu, który podzieliłby to drzewo na kawałki o odpowiedniej wielkości z twardymi linkami lub czymkolwiek innym (pozostawiając oryginał nietknięty). Mogę następnie wprowadzić te drzewa wielkości kęsa do procesu tworzenia kopii zapasowej (dodaj redundancję PAR2 itp.).
To nie jest wymyślny scenariusz, ale wygląda na to, że mógł już być zrobiony. Propozycje?
(Łączenie i pisanie w jednym kroku jest nie do uniknięcia, ponieważ chcę robić więcej rzeczy, zanim pliki zostaną wypalone).
backup
disk-usage
split
burning
Reid
źródło
źródło
par2
ochrony.Odpowiedzi:
Istnieje aplikacja przeznaczona do tego:
dirsplit
Zwykle mieszka w
cdrkit
lub wdirsplit
paczkach.Może tworzyć gotowe do użycia foldery z linkami do łatwego tworzenia płyt DVD za pomocą K3b lub innego oprogramowania GUI
źródło
genisoimage
pakiecie.Możesz także wypróbować fpart , narzędzie, które napisałem (na licencji BSD): https://sourceforge.net/projects/fpart/
źródło
Kiedyś napisałem brzydki scenariusz do podobnego celu. To tylko kludge, ale kiedy to napisałem, nie przejmowałem się czasem wykonania ani ładnością. Jestem pewien, że jest więcej „produkowanych” wersji tej samej koncepcji, ale jeśli chcesz uzyskać jakieś pomysły lub coś, co możesz zacząć hakować, oto (zrób to w 2008 roku, więc użyj na własne ryzyko!): - )
Wydaje mi się, że wyniki zostały udostępnione przez sambę hostowi Windows, który nagrał z niej dyski. Jeśli korzystasz z powyższego niezmienionego, możesz użyć
mkisofs
innego archiwizatora, który rozpoznaje dowiązania symboliczne.źródło
\[?*
). Sugerowana lektura: nie analizuj wyników ls , $ VAR vs $ {VAR} i cytuj lub nie cytuj . Zauważ, że nie przetestowałem wynikowego skryptu. Jeśli nie rozumiesz jednej z moich zmian, możesz zapytać.[
test
Kiedyś napisałem skrypt, aby rozwiązać podobny problem - nazwałem go „rozpowszechniać” (możesz przeczytać główny kod skryptu lub plik z komunikatem pomocy lub pobrać go jako pakiet ); z jego opisu :
Cały proces przebiega w kilku etapach: na jednym etapie tworzy „układy” dysku furure przy użyciu dowiązań symbolicznych do oryginalnych plików - dzięki czemu można interweniować i zmieniać przyszłe drzewa dysków.
Szczegóły dotyczące jego użycia można odczytać w komunikacie pomocy wydrukowanym przez skrypt (lub poprzez sprawdzenie kodu źródłowego).
Został napisany z myślą o trudniejszym przypadku użycia (wydawanie aktualizacji jako „diff” - zestawu dodanych nowych plików - do pierwotnie nagranej kolekcji plików), więc zawiera jeden dodatkowy etap początkowy, a mianowicie „naprawianie” „bieżący stan kolekcji plików (dla uproszczenia robi to poprzez replikację oryginalnej kolekcji plików za pomocą dowiązań symbolicznych w specjalnym miejscu pracy do zapisywania stanów kolekcji; następnie, w przyszłości, będzie w stanie stworzyć różnicę między przyszłym bieżącym stanem zbioru plików a tym stanem zapisanym). Tak więc, chociaż możesz nie potrzebować tej funkcji, nie możesz pominąć tego początkowego etapu, AFAIR.
Ponadto nie jestem teraz pewien (napisałem to kilka lat temu), czy dobrze traktuje złożone drzewa, czy też ma podzielić tylko zwykłe (jeden poziom) katalogi plików. (Aby się upewnić, przejrzyj komunikat pomocy lub kod źródłowy; ja też to sprawdzę, nieco później, kiedy będę miał trochę czasu).
Rzeczy związane z APT są opcjonalne, więc nie zwracaj uwagi, że może przygotować kolekcje pakietów do użycia przez APT, jeśli nie jest to potrzebne.
Jeśli jesteś zainteresowany, oczywiście możesz przepisać go do swoich potrzeb lub zasugerować ulepszenia.
(Proszę zwrócić uwagę, że pakiet zawiera dodatkowe użyteczne łatki, które nie zostały zastosowane w prezentowanym wykazie kodów w linku do repozytorium Git powyżej!)
źródło
distribute
który rozwiązuje podstawowym zadaniem poproszony o tutaj.Nie powinniśmy zapominać, że istota zadania jest rzeczywiście dość prosta; jak w tutorialu o Haskell (który jest napisany na temat pracy nad rozwiązaniem dla tego zadania, stopniowo udoskonalany)
(z przewodnika Autostopowiczów po Haskell, rozdział 1 )
(Dodatkowo w swoim pytaniu chciałbyś mieć możliwość dostosowania (edycji) powstałych układów dysków, a następnie skorzystania z narzędzia do ich wypalenia).
Możesz ponownie użyć (dostosować i ponownie użyć) prostego wariantu programu z tego samouczka Haskell do dzielenia kolekcji plików.
Niestety, w tym
distribute
narzędzia, które już wspomniano tu w innej odpowiedzi , prostota zasadniczego zadania łupania nie towarzyszy złożoności i bloatedness w interfejsie użytkownikadistribute
(ponieważ został napisany aby połączyć kilka zadań, chociaż wykonywane etapami, ale nadal łączy się nie w najczystszy sposób, jaki mógłbym teraz wymyślić).Aby pomóc ci w pewnym stopniu wykorzystać jego kod, oto fragment kodu bash
distribute
(w linii 380 ), który służy do wykonania tego „niezbędnego” zadania dzielenia kolekcji plików:( czytaj więcej po linii 454 )
Zauważ, że
eatFiles
funkcja przygotowuje układy przyszłych dysków jako drzewa, w których liście są dowiązaniami symbolicznymi do rzeczywistych plików. Tak więc spełnia twoje wymagania, abyś mógł edytować układy przed nagraniem.mkisofs
Narzędzie ma możliwość śledzić dowiązania symboliczne, które rzeczywiście jest stosowany w kodzie mojejmkiso
funkcji .Prezentowany skrypt (który możesz oczywiście zabrać i przepisać zgodnie z własnymi potrzebami!) Podąża za najprostszym pomysłem: zsumować rozmiary plików (a dokładniej w przypadku pakietów
distribute
) dokładnie w kolejności, w jakiej zostały wymienione. nie rób żadnych zmian.„Przewodnik autostopowiczów po Haskell” poważniej traktuje problem optymalizacji i sugeruje warianty programów, które próbowałyby inteligentnie zmienić rozmieszczenie plików, aby lepiej pasowały do dysków (i wymagały mniejszej liczby dysków):
(czytaj więcej w rozdziale 3 i dalszych.)
Inne inteligentne narzędzia
Powiedziano mi również, że Debian korzysta z narzędzia, które sprawia, że jego dyski CD są mądrzejsze niż moje
distribute
kolekcje wrt pakietów: jego wyniki są ładniejsze, ponieważ dba o zależności między pakietami i próbowałby stworzyć kolekcję pakietów, która działa na pierwszy dysk jest zamknięty w zależnościach, tzn. żaden pakiet z pierwszego dysku nie powinien wymagać pakietu z innego dysku (lub, przynajmniej powiedziałbym, liczbę takich zależności należy zminimalizować).źródło
backup2l może wykonać wiele z tej pracy. Nawet jeśli nie używasz pakietu bezpośrednio, możesz uzyskać od niego kilka pomysłów na skrypt.
źródło
rar
Archiwum może być pouczeni, aby automatycznie podzieli archiwum tworzy się na kawałki o wielkości określonej z-vsize
flagą.Archiwizowanie tego drzewa katalogów nazwanego
foo
na kawałki, powiedzmy, 500 megabajtów za sztukę, które określiszrar a backup.rar -v500m foo/
źródło
rar
, chyba że rozpakujesz ponownie każdą „część” do własnego katalogu, co oczywiście nie będzie działać, ponieważ części nie są tak zaprojektowane i nie są dzielone na granicach plików.tar
+split
, to jest też dar ; oto uwaga na temat jego istotnej funkcji: „(SLICES) został zaprojektowany, aby móc dzielić archiwum na kilka nośników wymiennych, niezależnie od ich liczby i wielkości”. Zakładam, że w porównaniu ztar
+split
pozwala na łatwiejszy dostęp do zarchiwizowanych plików. (BTW, ma również funkcję przypominającądistribute
: „DIFFERENTIAL BACKUP” i „DIRECTORY TREE SNAPSHOT”, ale nie może się podobać, że wynik jest specjalnym formatem, a nie ISO z drzewem katalogów.)