Mam 200 GB wolnego miejsca na dysku, 16 GB pamięci RAM (z czego ~ 1 GB zajmuje komputer i jądro) oraz 6 GB wymiany.
Mam zewnętrzny dysk SSD o pojemności 240 GB, z 70 GB wykorzystałem 1, a resztę bezpłatnie, i muszę wykonać kopię zapasową na dysku.
Zwykle dd if=/dev/sdb of=Desktop/disk.img
najpierw najpierw dysk, a następnie kompresję, ale najpierw nie jest możliwe zrobienie obrazu, ponieważ wymagałoby to znacznie więcej miejsca na dysku niż ja, nawet jeśli krok kompresji spowoduje, że wolne miejsce zostanie zmiażdżone, więc końcowe archiwum można łatwo zmieścić na moim dysku.
dd
domyślnie zapisuje do STDOUT i gzip
może czytać ze STDIN, więc teoretycznie mogę pisać dd if=/dev/sdb | gzip -9 -
, ale gzip
czytanie bajtów zajmuje znacznie więcej czasu niż dd
ich wytworzenie.
Od man pipe
:
Dane zapisywane na końcu zapisu potoku są buforowane przez jądro, dopóki nie zostaną odczytane z końca odczytu potoku.
Wizualizuję, |
że jest jak prawdziwa potok - jedna aplikacja wpycha dane, a druga pobiera dane z kolejki potoku tak szybko, jak to możliwe.
Co się stanie, gdy program po lewej stronie będzie zapisywał więcej danych szybciej niż druga strona potoku może mieć nadzieję na ich przetworzenie? Czy spowoduje to ekstremalne użycie pamięci lub zamiany, czy też jądro spróbuje utworzyć FIFO na dysku, wypełniając w ten sposób dysk? A może po prostu zawiedzie, SIGPIPE Broken pipe
jeśli bufor jest zbyt duży?
Zasadniczo sprowadza się to do dwóch pytań:
- Jakie są implikacje i wyniki wrzucania większej ilości danych do potoku niż odczytywane jednocześnie?
- Jaki jest niezawodny sposób kompresji strumienia danych na dysk bez umieszczania całego nieskompresowanego strumienia danych na dysku?
Uwaga 1: Nie mogę po prostu skopiować dokładnie pierwszych 70 używanych GB i oczekiwać, że dostanę działający system lub system plików, z powodu fragmentacji i innych rzeczy, które będą wymagały nienaruszonej pełnej zawartości.
lzop
zamiast gzip
; kompresuje się znacznie szybciej przy jedynie nieco niższym stopniu kompresji. Uważam, że idealnie nadaje się do obrazów dysków, na których szybkość kompresji może być prawdziwym wąskim gardłem.