Рішення проблеми з помилкою копіювання

Рішення проблеми з помилкою копіювання

Одного разу один з моїх друзів звернувся до мене за допомогою. Він повідав мені, що зіткнувся з проблемою при копіюванні зображень на свій USB-драйв. Після копіювання більше 200 фотографій несподівано виникла помилка, після якої стало неможливим скопіювати зображення і стало з'являтися наступне повідомлення:

Рішення проблеми з помилкою копіювання

На жаль, повідомлення "Неможливо створити файл або папку" жодним чином не вказувало на причину проблеми і не повідомляло, де слід шукати рішення. Мій знайомий був вельми кмітливим, тому, перш ніж звернутися до мене, перевірив, що місця на диску було більш ніж достатньо, але все-таки запустив утиліту Chkdsk для перевірки пам'яті на пошкодження. Однак, результатів це не дало, хоча помилка продовжувала невпинно з'являтися при спробі копіювання зображень на флеш-драйв.

Я, зі свого боку, я попросив його запустити Process Monitor, утиліту, яка в реальному часі реєструє всі звернення до файлової системи і реєстру, що теоретично дозволяє визначити причину різних збоїв і помилок ОС. Потім він відправив мені звіт утиліти в форматі PML і я відкрив його. Після установки фільтра по букві диска, а потім фільтра операцій, що відносяться безпосередньо до копіювання інформації, я став прочісувати звіт на наявність помилок. Власне, мені не треба було багато часу, оскільки в останньому рядку звіту і була помилка, що викликає діалог системи:

Рішення проблеми з помилкою копіювання

З метою економії простору на робочому столі комп'ютера Process Monitor додає до відображуваним помилок префікс "STATUS", тому дійсної системною помилкою в даному випадку була STATUS_CANNOT_MAKE. Особисто я ніколи не чув і, тим більше, не бачив подібну помилку. Крім того, замість імені помилки Process Monitor показував її код - 0xc00002ea, тому довелося пошукати в файлі Ntstatus.h з Windows Device Driver Kit, а потім додати в Process Monitor функцію, конвертуються коди помилок в текст.

Тоді мені вдалося відшукати помилку в вихідному коді Windows, але як щодо тих, хто не має можливості покопатися в вихідному коді ОС. Як їм вирішити дану проблему? Пошук привів мене до старої гілці в новинній групі для розробників файлової системи Windows:

Рішення проблеми з помилкою копіювання

Безумовно, розділ був відформатований під файлову систему FAT і безліч файлів, включаючи файли з довгими іменами, цілком могли використовувати всі доступні 512 кореневих папок.

Проблему вдалося-таки вирішити. Я порадив моєму приятелю два варіанти: 1) створити в кореневій директорії підпапку і скопіювати файли, що туди або 2) відформатувати флеш-драйв під файлову систему FAT32, що прибере обмеження по числу файлів / папок в кореневій директорії диска.

Проте, одне питання залишилося невирішеним. Чому диск був форматувати під FAT замість FAT32? Причина криється і в виробника USB-драйву і в діалозі форматування, використовуваному в Windows. Я не впевнений, але по-моєму більшість виробників форматують випускаються накопичувачі під FAT, оскільки дана система гарантовано працює там, де інші файлові системи, як FAT32, не підтримуються. Наприклад в DOS 6 і Windows 95.

Що до Windows, то я завжди думав, що за замовчуванням пропонується форматувати диск під FAT32, але діалог форматування для одного з моїх пристроїв показав, що це не так:

Рішення проблеми з помилкою копіювання

Мені не вдалося знайти рекомендації по створенню даного діалогу, але швидкий погляд на вихідний код показав, що Windows за замовчуванням пропонує форматувати під FAT все не-CD-ROM-подібні видобувні пристрої розміром менш 4GB.
Думаю, що справа про помилку копіювання можна закрити, але я відчуваю себе зобов'язаним зробити дві справи: 1) спробувати зробити повідомлення про помилки більш зрозумілими і 2) лобіювати зміна формату, який використовується за умовчанням для форматування флеш-драйвів, на FAT32.

Схожі статті