Fizyczne miejsce na dysku zajęte przez plik i jego nazwę

2

Podczas przesyłania dużej liczby plików ze stacji roboczej Linux Redhat na FAT32sformatowany zewnętrzny dysk twardy ( WD 2 TBsformatowany przez narzędzie dyskowe Mac) napotkałem błąd, że na moim dysku nie ma wystarczającej ilości miejsca. Ale sprawdziłem, czy zostało jeszcze miejsce ~700 GBna dysku, więc zgaduję, że zabrakło mi miejsca na dysku z powodu długich nazw plików (nie jesteś pewien?)? Jak to sprawdzić?

Moje dane zewnętrznego dysku twardego są

/dev/sdc1 on /media/GUDDULINUX3 type vfat (rw,nosuid,nodev,relatime,uid=988,gid=2000,fmask=0022,dmask=0077,codepage=cp437,iocharset=ascii,s

Obecnie istnieje około ~545katalogów z niczego między ~7000do ~11000plików w każdym katalogu. Każdy plik jest plikiem binarnym o rozmiarze (sprawdzanym za pomocą du -sh) ~32Klub 96K(mniej więcej po połowie), a nazwa jest podobna XC6_9k.131_132.12.2012.210.s3( 29długość znaków). Rozmiar pliku wygląda OK, ponieważ powinny to być pliki binarne z 8000lub 24000zmiennoprzecinkowe.

Czy to możliwe, że coś innego jest nie tak? Niestety nie mogę sprawdzić dokładnego miejsca na dysku zajętego przez katalogi, próba du -shtrwa wiecznie.

Edycja 1 - Użyłem Mac Disk Utility do weryfikacji zewnętrznego dysku twardego i mówi: 11361590 files, 1076797472 KiB free (33649921 clusters)

Edycja 2 -

Następujących sugestii Angelo, próbowałem df -hi df -ina zewnętrznym dysku twardym dołączony do mojego laptopa (MAC). Wygląda na to, że skończyły mi się wolne i-węzły /Volumes/GUDDULINUX3. Wszelkie sugestie dotyczące tego, co robić - czy uzyskam i-węzły, jeśli będę mieć tarmałe pliki w jednym tarpliku dla każdego katalogu? Czy powinienem przejść na NTFSsformatowany dysk?

avinash$ df -h
Filesystem                          Size   Used  Avail Capacity  iused   ifree %iused  Mounted on
/dev/disk0s2                       233Gi  216Gi   17Gi    93% 56587186 4482254   93%   /
devfs                              187Ki  187Ki    0Bi   100%      646       0  100%   /dev
map -hosts                           0Bi    0Bi    0Bi   100%        0       0  100%   /net
map auto_home                        0Bi    0Bi    0Bi   100%        0       0  100%   /home
/dev/disk1s1                       1.8Ti  836Gi  1.0Ti    45%        0       0  100%   /Volumes/GUDDULINUX3

avinash$ df -i
Filesystem                        512-blocks       Used  Available Capacity  iused   ifree %iused  Mounted on
/dev/disk0s2                       488555536  452185504   35858032    93% 56587186 4482254   93%   /
devfs                                    373        373          0   100%      646       0  100%   /dev
map -hosts                                 0          0          0   100%        0       0  100%   /net
map auto_home                              0          0          0   100%        0       0  100%   /home
localhost:/rGEmV8JCfpffeQBEQFAlLe  488555536  488555536          0   100%        0       0  100%   /Volumes/MobileBackups
/dev/disk1s1                      3906009792 1752414720 2153595072    45%        0       0  100%   /Volumes/GUDDULINUX3

Są to wyniki z dyskiem podłączonym do mojej stacji roboczej z systemem Linux, nie wyświetla informacji o i-węzłach.

seismo82% df -h /media/GUDDULINUX3/ 
Filesystem Size Used Avail Use% Mounted on 
/dev/sdc1 1.9T 836G 1.1T 45% /media/GUDDULINUX3 

seismo82% df -i /media/GUDDULINUX3/
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/sdc1           0     0     0     - /media/GUDDULINUX3

Edycja 3 -

Wygląda na to, że inodecoś nie działa FAT32. Myślę, że problem polega na tym, że istnieje niższy limit FAT32liczby plików w katalogu, niższy niż w ~65kzależności od nazwy pliku. Po pierwsze, zaliczyłem wiele istniejących plików na dysku twardym ext, które powinny zwolnić wiele inodes(lub ich FAT32odpowiedników). Ale nadal przenoszenie dużego katalogu (zawierającego ~23kpliki) pokazało błąd „brak miejsca na urządzeniu”. Następnie zamiast przenosić pojedyncze pliki, utworzyłem tar katalogu i przeniesienie go było możliwe na dysk zewnętrzny !!! Próba rozpakowania go na dysku ext ponownie dała mi błąd. Myślę więc, że napotkałem ograniczenie liczby plików w katalogu. Zobacz komentarz w3dk do tego Max plików na katalog

Sprawdziłem katalogi, które zgłosiły błąd podczas przenoszenia. Limit dotyczy 16383plików nazw plików ze 29znakami i 21843plików nazw plików ze 20znakami. Teoretycznie limitem są ~65kpliki dla plików o nazwach w 8.3formacie. Dziękujemy wszystkim, którzy pomogli mi zdiagnozować problem. Na razie zajmę się tylko tym, co mam.

Guddu
źródło
1
Powinieneś opublikować polecenie, które uruchamiasz i wyświetlany błąd. Maksymalna długość nazwy pliku to 255 znaków.
Angelo,
2
I nie zabrakło ci miejsca lub i-węzłów (df -h i df -i)?
Angelo,
1
df powinien być natychmiastowy
Angelo,
2
FAT tak naprawdę nie ma „i-węzłów” w sensie ext2 / ext3, ale całkowita liczba plików jest ograniczona, a wartość „i-węzłów” prawdopodobnie to zgłasza. Tak więc, tarowanie małych plików (lub tylko wszystkich plików w katalogu) obejdzie ten problem.
bezpośrednio
1
@Guddu Nie sądzę, że z tego wyniku można wywnioskować, że natrafiłeś na ograniczenie liczby plików. Jestem prawie pewien, że OSX zgłasza 100% użycia, ponieważ widzi 0 dostępnych i-węzłów i 0 używanych i-węzłów. Nadal nie jestem pewien, gdzie jest problem. Używam również Mac / Windows / Linux, więc rozumiem, jak trudno jest wybrać zadowalający system plików dla wszystkich 3. Nie pamiętam, co czułem lepiej: obsługa NTFS na Macu lub obsługa exFAT na Linuksie. Myślę, że skończyło się na tym, że użyłem NTFS i OSX: VirtualBox z Linuksem do montowania i pisania na nim, ponieważ było to rzadkie.
Angelo,

Odpowiedzi:

2

Oprócz limitów wielkości partycji, limitów rozmiaru plików i limitów rozmiaru katalogu systemu plików FAT32 (z których wszystkie brzmią, jakbyś był świadomy), istnieje również maksymalny limit 268 435 437 plików ogółem na woluminie FAT32, niezależnie od tego katalogu.

Szybka matematyka, 545 katalogów z 7000 plików w każdym to prawie 4 miliony plików - znacznie więcej niż FAT32 może obsłużyć.

Wes Sayeed
źródło
przepraszam, czuję, że coś mi brakuje, 4 miliony to wciąż mniej niż 268 milionów?
Guddu,
1
Nie, niczego nie brakuje. Kiedy przeczytałem twoje pytanie, po prostu wiedziałem , że musisz mieć jakiś limit FS, więc przejrzałem te limity, zobaczyłem 268 tysięcy i zdecydowałem, że to jest to. Oczywiście masz rację ... To 268 milionów, a nie tysiąc, więc moja odpowiedź jest zła. Czuję się trochę zawstydzony, ale mam na to dwa głosy poparcia! Co najmniej dwie inne osoby popełniły ten sam błąd, który właśnie popełniłem, a to sprawia, że ​​czuję się mniej głupio. Hahaha!
Wes Sayeed,