16GB — максимальный размер файла на NTFS и Windows 7?
Стал у меня в медиаплеере (Ellion HMP-1000) глючить диск. Я купил новый на замену, подключил их оба ко внешнему SATA/USB3 контроллеру, да и запустил копироваться старый - на новый (дело было под Windows7/Ultimate). Скопировалось всё, кроме файлов >16GB размером. Тут бы я и смирился с неизбежным, предварительно погуглив тему, но меня мучает сомнение: эти самые файлы размером более 16GB были скачаны торрентом на тот самый компьютер, который отказался их потом копировать, и до сих пор там спокойно лежат, и нормально читаются.
Т.е. имеется W7/Ult x64, c диском, про который NTFSInfo говорит:
Volume size : 715402 MB
Total sectors : 1465144001
Total clusters : 183143000
Free clusters : 30313390
Free space : 118411 MB (16% of drive)
Bytes per sector : 512
Bytes per cluster : 4096
Bytes per MFT record : 1024
и на который скачался utracker'ом 17GB файл, каковой до сих пор прекрасно и целиком читается. Этот файл был скопирован по сети на медиаплеер (работает под линуксом, но фильмы держит на NTFS разделе), откуда тоже прекрасно проигрался. Будучи подключен к вышеуказанному компьютеру напрямую, через SATA/USB контроллер, диск из медиаплеера виден как
Volume size : 1902761 MB
Total sectors : 3896854919
Total clusters : 487106864
Free clusters : 62272474
Free space : 243251 MB (12% of drive)
Bytes per sector : 512
Bytes per cluster : 4096
Bytes per MFT record : 1024
и 17GB файл с него не открывается (пишет "The requested operation could not be completed due to a file system limitation").
Собственно, вопросов два:
1. если 16GB предел в размера файла в Win7/Ult есть, то как туда скачался 17GB файл?
2. если предела нет, то почему OS не дает считать этот файл?
1. Предел есть - это ограничение адресации журнала NTFS.
Файловая система дает возможность записывать файлы больше 16 гб при маленьком журнале, если они записываются как Append only...
2. По умолчанию файлы больше 16Гб не копируются в винде так как при сбое чтения/записи на фрагменте который больше этих самых 16Гб ОС не может контролировать целостность файловой системы из-за маленького журнала. Если с журналом все впорядке, то и максимальный размер файла будет другим.
Максимальный размер журнала и длинна указателя зависит от размера тома и свободного места на диске. Хотя вообще аддресация файлов позволяет хранить 2^64 - 1 байт файлы.
Вы можете без проблем скопировать файлы любым удобным скриптом, например на питоне.
Вообще желательно оставлять 15% свободного места в разделе, просто потому что в противном случае будет урезаться величина журнала, а это чревато уменьшнием надёжности файловой системы.
Линуксу пофиг на подобные ограничения, так как в большинстве случаев он не фрагментирует файлы и у него нет потребности раздувать журнал попусту как это делает винда, и естественно в винде теоретическая пропускная способность будет больше.
Спасибо! Весьма познавательно. Значит, CreateFile(FILE_APPEND_DATA, OPEN_EXISTING) такой файл должна открывать, и позволять писать за границу 16GB? Хорошо, это я проверю. А что делать с чтением? Почему на одной ФС он (одной и той же программой) открывается, а на другой - нет?