Próbuję skopiować jeden katalog z dużą liczbą plików do innego miejsca docelowego. Zrobiłem:
cp -r src_dir another_destination/
Następnie chciałem potwierdzić, że rozmiar katalogu docelowego jest taki sam jak oryginalny:
du -s src_dir
3782288 src_dir
du -s another_destination/src_dir
3502320 another_destination/src_dir
Potem pomyślałem, że może istnieć kilka dowiązań symbolicznych, po których nie następuje cp
polecenie, i dodałem -a
flagę:
-a Takie same jak opcje -pPR. Zachowuje strukturę i atrybuty plików, ale nie strukturę katalogów.
cp -a src_dir another_destination/
ale du -s
dał mi te same wyniki. Interesujące jest to, że zarówno źródło, jak i miejsce docelowe mają taką samą liczbę plików i katalogów:
tree src_dir | wc -l
4293
tree another_destination/src_dir | wc -l
4293
Co robię źle, że otrzymuję różne rozmiary za pomocą du
polecenia?
AKTUALIZACJA
Kiedy próbuję uzyskać rozmiary poszczególnych katalogów za pomocą du
polecenia, otrzymuję różne wyniki:
du -s src_dir/sub_dir1
1112 src_dir/sub_dir1
du -s another_destination/src_dir/sub_dir1
1168 another_destination/src_dir/sub_dir1
Kiedy przeglądam pliki ls -la
, poszczególne rozmiary plików są takie same, ale sumy są różne:
ls -la src_dir/sub_dir1
total 1168
drwxr-xr-x 5 hirurg103 staff 160 Jan 30 20:58 .
drwxr-xr-x 1109 hirurg103 staff 35488 Jan 30 21:43 ..
-rw-r--r-- 1 hirurg103 staff 431953 Jan 30 20:58 file1.pdf
-rw-r--r-- 1 hirurg103 staff 126667 Jan 30 20:54 file2.png
-rw-r--r-- 1 hirurg103 staff 7386 Jan 30 20:49 file3.png
ls -la another_destination/src_dir/sub_dir1
total 1112
drwxr-xr-x 5 hirurg103 staff 160 Jan 30 20:58 .
drwxr-xr-x 1109 hirurg103 staff 35488 Jan 30 21:43 ..
-rw-r--r-- 1 hirurg103 staff 431953 Jan 30 20:58 file1.pdf
-rw-r--r-- 1 hirurg103 staff 126667 Jan 30 20:54 file2.png
-rw-r--r-- 1 hirurg103 staff 7386 Jan 30 20:49 file3.png
źródło
ls -la
wyniki. Zobacz AKTUALIZACJAcp
są dokładnie tak duże, jak powinny.ls -ls
aby zobaczyć, ile miejsca na dysku zajmują pliki.Odpowiedzi:
Wynika to z tego, że
du
domyślnie nie pokazuje rozmiaru pliku (-ów), ale miejsca na dysku, którego używają. Musisz użyć tej-b
opcji, aby uzyskać sumę rozmiarów plików zamiast łącznej ilości miejsca na dysku. Na przykład:Mimo że plik ma tylko 7 bajtów, zajmie całe 4096 bajtów miejsca na dysku (w moim konkretnym przykładzie; będzie się różnić w zależności od używanego systemu plików, wielkości klastra itp.).
Ponadto niektóre systemy plików obsługują tak zwane pliki rzadkie, które nie zajmują miejsca na dysku dla bloków, które są zerami. Na przykład:
Krótko mówiąc, aby sprawdzić, czy wszystkie pliki zostały skopiowane, należy użyć
du -sb
zamiastdu -s
.źródło
du
dane wyjściowe: sprawiłoby, że skompresowane pliki wyglądałyby rzadko na programy, które używają zwykłego algorytmu długości! = używane bloki. btrfs.wiki.kernel.org/index.php/…Może to wynikać z rozmiaru katalogu „pliki”.
W większości systemów plików na dysku katalog jest podobny do zwykłego pliku (głównie tylko z listą nazw i numerów węzłów), z rosnącą liczbą bloków.
Jeśli dodasz wiele plików, sam katalog powiększy się. Ale jeśli usuniesz je później, w wielu systemach plików katalog się nie zmniejszy.
Więc jeśli jeden z katalogów w twoim oryginalnym drzewie miał kiedyś wiele plików, które później zostały usunięte, kopia tego katalogu będzie „mniejsza”, ponieważ wykorzystuje tylko tyle bloków, ile potrzebuje dla bieżącej liczby plików.
Na listach w aktualizacji znajdują się 3 katalogi, których nie wymieniono. Porównaj wielkość tych (lub ich potomków) w swoich
ls -al
wynikach.Aby znaleźć różnicę, możesz wypróbować
ls -alr
oba katalogi, przekierowane do pliku, a następnie jedendiff
z dwóch wyjść.źródło
cp -a src_dir another_destination/
jest mało prawdopodobne, ponieważanother_destionation
byłby nowo utworzony i w ten sposób zoptymalizowany, podczas gdysrc_dir
(który mógł mieć kilka większych katalogów z wcześniejszego tworzenia / dodawania) może rzeczywiście być większy niż potrzeba. Jednak wyniki pokazują, że wsrc_dir
rzeczywistości jest mniejszy (1112 < 1168
).> In the listings in your update, there are 3 directories you haven't listed
. W rzeczywistości są to pliki, a nie katalogi. zobacz nazwy plików> if one of the directories in your original tree had many files at some point, which were later deleted
. Skopiowałem katalog źródłowy ze zdalnego serwera za pomocą polecenia rsync i nic z niego nie.
wpisy pokazują 5 linków na i-węźle. Jednym z nich jest link z katalogu nadrzędnego do tego. Innym jest.
. Są jeszcze 3 linki, które powinny być..
linkami z podkatalogów. O ile nie brakuje mi czegoś bardzo dziwnego, muszą być w nich 3 podkatalogi. Czy mówisz, że te wykazy są pełnym wynikiem?