Неправильное «Нет свободного места на устройстве» в Ubuntu и NTFS для редких каталогов и имен файлов

501
Paolo

Я испытываю самую странную проблему на машине с Ubuntu (довольно старая Ubuntu 10.04.1 LTS, которую по некоторым причинам я не готов обновить) и на внешнем USB-накопителе в формате NTFS. Обратите внимание, что машина годами использовалась как файловый и веб-сервер, и нет явных дефектов, несмотря на довольно интенсивное использование, кроме тех, которые обсуждались ниже. Поскольку я потратил несколько часов, чтобы попытаться понять проблему без какого-либо успеха, я надеюсь, что кто-то может дать некоторые подсказки о том, что может произойти (помимо предложения перейти на более свежую версию Ubuntu - что я буду делать в любом случае, но я не могу Делай сейчас).

Вот пример чего-то, что не работает ("/ media / paolo \ 's \ # 3", конечно, это USB-устройство, о котором идет речь):

rm -rf /media/paolo\'s\ #3/audio id3v2 --list "/media/paolo's #3/01 -- Psalm 108 vs. 2 - Psalm 100.mp3" id3v2 tag info for /media/paolo's #3/01 -- Psalm 108 vs. 2 - Psalm 100.mp3: TALB (Album/Movie/Show title): Chichester Psalms, for Boy Soprano, Mixed Chorus, Organ, Harp, and Percussion (1965) TCOM (Composer): Bernstein, Leonard (1918-1990) [...] mkdir -p "/media/paolo's #3/audio/mp3/Classical/Bernstein, Leonard (1918-1990)/4. Vocal/Chichester Psalms, for Boy Soprano, Mixed Chorus, Organ, Harp, and Percussion (1965) -- Kelly, Franklin-Kitchen, Nayeler, Budd, Charrier, Bournemouth Symphony Chorus and Orchestra, Alsop" cp "/media/paolo's #3/01 -- Psalm 108 vs. 2 - Psalm 100.mp3" "/media/paolo's #3/audio/mp3/Classical/Bernstein, Leonard (1918-1990)/4. Vocal/Chichester Psalms, for Boy Soprano, Mixed Chorus, Organ, Harp, and Percussion (1965) -- Kelly, Franklin-Kitchen, Nayeler, Budd, Charrier, Bournemouth Symphony Chorus and Orchestra, Alsop" cp: cannot create regular file `/media/paolo\'s #3/audio/mp3/Classical/Bernstein, Leonard (1918-1990)/4. Vocal/Chichester Psalms, for Boy Soprano, Mixed Chorus, Organ, Harp, and Percussion (1965) -- Kelly, Franklin-Kitchen, Nayeler, Budd, Charrier, Bournemouth Symphony Chorus and Orchestra, Alsop/01 -- Psalm 108 vs. 2 - Psalm 100.mp3': No space left on device 

То есть я просто хочу рекурсивно создать глубокий путь и скопировать туда действительный файл из корня устройства. Конечно, проблема в том, что на диске достаточно свободного места (100 ГБ).

Теперь важно отметить, что я не могу упростить пути, потому что практически любое другое имя будет работать нормально. Более конкретно, я обнаружил проблему во время выполнения сценария Perl, который копирует несколько ГБ данных, и из тысяч каталогов, аналогичных приведенным выше, только дюжина имеет проблему (показано здесь, как если бы они использовались в одном цитаты в оболочке):

/media/paolo's #3/audio/mp3/Classical/Bach, Carl Philipp Emanuel (1714-1788)/5. Opera/Oratorio '\''Die Auferstehung und Himmelfahrt Jesu'\'' for 3 Soli, SATB Chorus, and Orchestra, Wq240 (1777-1778) -- Schlick, Prégardien, Varcoe, Rheinische Kantorei, Das Kleine Konzert, Max /media/paolo's #3/audio/mp3/Classical/Bach, Johann Sebastian (1685-1750)/4. Vocal/Cantata no. 211 '\''Schweigt stille, plaudert nicht'\'' for Soprano, Tenor, Bass, Choir, and Orchestra, BWV211 (1734-1735) -- Hansmann, Equiluz, van Egmond, Concentus Musicus Wien, Harnoncourt /media/paolo's #3/audio/mp3/Classical/Bernstein, Leonard (1918-1990)/4. Vocal/Chichester Psalms, for Boy Soprano, Mixed Chorus, Organ, Harp, and Percussion (1965) -- Kelly, Franklin-Kitchen, Nayeler, Budd, Charrier, Bournemouth Symphony Chorus and Orchestra, Alsop /media/paolo's #3/audio/mp3/Classical/Bruhns, Nicolaus (1665-1697)/4. Vocal/Cantate '\''Muss nicht der Mensch'\'', for Soprano, Alto, Tenor, Bass, 2 Trumpets, Bassoon, 2 Violins, 2 Gambas, Cello, and Continuo -- De Reyghere, Bowman, De Mey, van Egmond, Ricercar Consort /media/paolo's #3/audio/mp3/Classical/Caresana, Cristofaro (c1640-1709)/4. Vocal/Cantata '\''L'\''adoratione de'\'' Maggi'\'' for 6 Voices and Instruments '\''Per la nascita di nostro Signore'\'' (1676) -- Schiavo, Varriale, Mineccia, De Vittorio, Totaro, Naviglio, I Turchini, Florio /media/paolo's #3/audio/mp3/Classical/Fux, Johann (1660-1741)/1. Orchestral/Serenada à 8 for 2 Trumpets, 2 Oboes, Bassoon, 2 Violins, Viola, and Continuo in C major from '\''Concentus musico-instrumentalis'\'', op. 1, K.352 (1701) -- Concentus Musicus Wien, Harnoncourt /media/paolo's #3/audio/mp3/Classical/Handel, George Frideric (1685-1759)/4. Vocal/Motet '\''Saeviat tellus inter rigoris'\'' for Soprano, 2 Oboes, Strings, and Continuo in D major, HWV240 (1707) -- Massis, Choeur des Musiciens du Louvre, Les Musiciens du Louvre, Minkowski /media/paolo's #3/audio/mp3/Classical/Schumann, Robert (1810-1856)/4. Vocal/Requiem for Mignon from Goethe'\''s '\''Wilhelm Meister'\'', op. 98b (1849) -- Bonney, Poschner, Schaechter, Hintermeier, Pita, Schmidt, Wiener Staatsopernchor, Chamber Orchestra of Europe, Abbado /media/paolo's #3/audio/mp3/Classical/Telemann, Georg Philipp (1681-1767)/4. Vocal/Cantata '\''Ein Mensch ist in seinem Leben wie Gras'\'' for Soli ATB, Choir SATB, and Orchestra, TWV4:18 -- Wessel, Jochens, Schreckenberger, Rheinische Kantorei, Das Kleine Konzert, Max /media/paolo's #3/audio/mp3/Classical/Telemann, Georg Philipp (1681-1767)/5. Opera/Oratorio '\''Betrachtung der 9. Stunde an dem Todestage Jesu'\'' for Soli ATBB, Choir SATB, and Orchestra, TWV5:5 -- Chordier, Jochens, Wimmer, van der Kamp, Rheinische Kantorei, Das Kleine Konzert, Max /media/paolo's #3/audio/mp3/Classical/Verdi, Giuseppe (1813-1901)/4. Vocal/Messa da Requiem for 4 Solo Voices, Chorus, and Orchestra (1874) -- Tomowa-Sintow, Baltsa, Carreras, van Dam, Konzertvereinigung Wiener Staatsopernchor, Wiener Philharmoniker, von Karajan /media/paolo's #3/audio/mp3/Classical/Waxman, Franz (1906-1967)/5. Opera/Joshua, Dramatic Oratorio for Soloists, Narrator, Mixed Chorus, and Orchestra (1959) -- Schnell, Gilfry, Hallenberg, Buchi, Poole, Prague Philharmonic Choir, Prague Philharmonia, Sedares /media/paolo's #3/audio/mp3/Classical/Zelenka, Jan Dismas (1679-1745)/4. Vocal/Missa Divi Xaverii, for Soloists SATB, Choir SATB, 2 Flutes, 2 Oboes, 4 Trumpets, Timpani, Strings, and Continuo in D major, ZWV12 (1729) -- Collegium Vocale 1704, Collegium 1704, Luks 

Несколько комментариев о том, что я думал, может быть причиной сбоя, и, я полагаю, это не так: (1) Ни один из этих путей, даже включая имена копируемых файлов, не является самым длинным, который я копирую - их очень много. более длинные, которые прекрасно работают. (2) Хотя многие из них содержат не-ASCII символы UTF-8 и слегка специальные символы, такие как одинарные кавычки, большинство других успешно созданных каталогов и файлов имеют точно такие же характеристики. (3) Незначительные изменения в именах каталогов могут привести к успеху процесса; в первом случае из приведенного выше списка я заметил, что удаление одного из двух пробелов перед «Schlick» приводит к успеху, но добавление третьего по-прежнему не удается. Опять же, обратите внимание, что тысячи очевидно очень похожих каталогов не имеют никаких проблем. (4) После первой неудачной копии (из-за «Нет свободного места на устройстве») дальнейшие попытки копирования (того же или другого файла) фактически терпят неудачу из-за «ошибки ввода / вывода». Я не уверен, имеет ли это значение, но dmesg, похоже, не показывает абсолютно ничего, связанного с этим. (5) Поведение довольно детерминированное, и я наблюдал его для одних и тех же каталогов более недели, и он много раз выживал, не подключая и не перемонтируя USB-диск.

Чтобы показать точку (2) выше, вот рабочий пример:

rm -rf /media/paolo\'s\ #3/audio mkdir -p "/media/paolo's #3/audio/mp3/Classical/Bach, Johann Sebastian (1685-1750)/4. Vocal/Cantata no. 17 'Wer Dank opfert, der preiset mich' for Soprano, Alto, Tenor, Bass, Choir, and Orchestra, BWV17 (1726) -- Soloist of the Wiener Sängerknaben, Esswood, Equiluz, van Egmond, Wiener Sängerknaben, Concentus Musicus Wien, Harnoncourt" cp "./mp3/Classical/Bach, Johann Sebastian (1685-1750)/4. Vocal/Cantata no. 17 'Wer Dank opfert, der preiset mich' for Soprano, Alto, Tenor, Bass, Choir, and Orchestra, BWV17 (1726) -- Soloist of the Wiener Sängerknaben, Esswood, Equiluz, van Egmond, Wiener Sängerknaben, Concentus Musicus Wien, Harnoncourt/01 -- Coro; Wer Dank opfert, der preiset mich.mp3" "/media/paolo's #3/audio/mp3/Classical/Bach, Johann Sebastian (1685-1750)/4. Vocal/Cantata no. 17 'Wer Dank opfert, der preiset mich' for Soprano, Alto, Tenor, Bass, Choir, and Orchestra, BWV17 (1726) -- Soloist of the Wiener Sängerknaben, Esswood, Equiluz, van Egmond, Wiener Sängerknaben, Concentus Musicus Wien, Harnoncourt" 

Можно заметить, что здесь присутствуют акцентированные буквы, двойные пробелы и что общий путь к первому скопированному файлу здесь длиннее, чем для одного из неисправных каталогов:

echo "/media/paolo's #3/audio/mp3/Classical/Bernstein, Leonard (1918-1990)/4. Vocal/Chichester Psalms, for Boy Soprano, Mixed Chorus, Organ, Harp, and Percussion (1965) -- Kelly, Franklin-Kitchen, Nayeler, Budd, Charrier, Bournemouth Symphony Chorus and Orchestra, Alsop/01 -- Psalm 108 vs. 2 - Psalm 100.mp3" | wc -c 303 echo "/media/paolo's #3/audio/mp3/Classical/Bach, Johann Sebastian (1685-1750)/4. Vocal/Cantata no. 17 'Wer Dank opfert, der preiset mich' for Soprano, Alto, Tenor, Bass, Choir, and Orchestra, BWV17 (1726) -- Soloist of the Wiener Sängerknaben, Esswood, Equiluz, van Egmond, Wiener Sängerknaben, Concentus Musicus Wien, Harnoncourt/01 -- Coro; Wer Dank opfert, der preiset mich.mp3" | wc -c 379 

Вот еще один странный пример того, что происходит. Это на самом деле работает нормально:

rm -rf /media/paolo\'s\ #3/audio mkdir -p "/media/paolo's #3/audio/mp3/Classical/Bernstein, Leonard (1918-1990)/4. Vocal/Chichester Psalms, for Boy Soprano, Mixed Chorus, Organ, Harp, and Percussion (1965) -- Kelly, Franklin-Kitchen, Nayeler, Budd, Charrier, Bournemouth Symphony Chorus and Orchestra, Alsop" touch "/media/paolo's #3/audio/mp3/Classical/Bernstein, Leonard (1918-1990)/4. Vocal/Chichester Psalms, for Boy Soprano, Mixed Chorus, Organ, Harp, and Percussion (1965) -- Kelly, Franklin-Kitchen, Nayeler, Budd, Charrier, Bournemouth Symphony Chorus and Orchestra, Alsop/TEST" cp "/media/paolo's #3/01 -- Psalm 108 vs. 2 - Psalm 100.mp3" "/media/paolo's #3/audio/mp3/Classical/Bernstein, Leonard (1918-1990)/4. Vocal/Chichester Psalms, for Boy Soprano, Mixed Chorus, Organ, Harp, and Percussion (1965) -- Kelly, Franklin-Kitchen, Nayeler, Budd, Charrier, Bournemouth Symphony Chorus and Orchestra, Alsop" id3v2 --list "/media/paolo's #3/audio/mp3/Classical/Bernstein, Leonard (1918-1990)/4. Vocal/Chichester Psalms, for Boy Soprano, Mixed Chorus, Organ, Harp, and Percussion (1965) -- Kelly, Franklin-Kitchen, Nayeler, Budd, Charrier, Bournemouth Symphony Chorus and Orchestra, Alsop/01 -- Psalm 108 vs. 2 - Psalm 100.mp3"  id3v2 tag info for /media/paolo's #3/audio/mp3/Classical/Bernstein, Leonard (1918-1990)/4. Vocal/Chichester Psalms, for Boy Soprano, Mixed Chorus, Organ, Harp, and Percussion (1965) -- Kelly, Franklin-Kitchen, Nayeler, Budd, Charrier, Bournemouth Symphony Chorus and Orchestra, Alsop/01 -- Psalm 108 vs. 2 - Psalm 100.mp3: TALB (Album/Movie/Show title): Chichester Psalms, for Boy Soprano, Mixed Chorus, Organ, Harp, and Percussion (1965) TCOM (Composer): Bernstein, Leonard (1918-1990) [...] 

Единственная разница с первым примером заключается в том, что перед копированием я касаюсь случайного файла в каталоге. Затем копия работает, и (не показано в приведенном выше примере) я могу удалить файл, к которому прикоснулись, со всем оставшимся здоровым. Но если я сразу удаляю файл TEST после прикосновения к нему, то последующее копирование завершается неудачно. Обратите внимание, что я пытался использовать эту технику для быстрого обхода сценария: несмотря на то, что он отлично работал на простых тестовых примерах, он не работает везде - увы, на данный момент у меня не так много информации.

Я понятия не имею, что происходит и что я могу сделать (опять же, если не считать изменения версии Ubuntu), чтобы обойти проблему.

1
Возможно ли, что они содержат непечатаемые символы, которые не допускаются? Вы упомянули об удалении «пробела», и проблема была решена для этого файла, но добавление еще одного пробела не устранило это ... возможно ли, что удаленное вами пространство на самом деле не было «пробелом» (ansi 32) вообще? Это также объяснило бы последний странный случай и почему другие _apparently_ подобные пути работают нормально. В этом случае вы можете заменить регулярные выражения всеми символами, кроме символов слова / разрешенного символа в каждом имени файла / пути, на один пробел в вашем скрипте, чтобы создать целевой путь для использования при выполнении операции копирования. Cliff Armstrong 6 лет назад 1
Клифф, отличная идея, спасибо. К сожалению, я только что проверил, и все пробелы обычные. Кроме того, все соответствует UTF-8, поэтому, на мой взгляд, оно должно работать и с неразрывными пробелами и т. Д. Но, во всяком случае, не было ни одного из преступников, которых я только что проверил. Paolo 6 лет назад 0
Может быть связано с этим: https://stackoverflow.com/a/15971467/2625090. Ваше тестовое имя файла '/ media / paolo \' s # 3 / audio / mp3 / ... 'имеет длину 303 символа, поэтому серверная часть ntfs может выдавать исключение для такого длинного пути, и Ubuntu, вероятно, просто переводит его как " нет места осталось "ошибка. arielnmz 6 лет назад 0
@arielnmz: Я не думаю, что это проблема длины, потому что у меня есть много длинных путей, которые прекрасно работают. Они оба длиннее в сумме (см. 379 в приведенном выше примере, у которого нет проблем) и являются самым длинным компонентом пути (см. Пример выше, хотя его не так ясно увидеть сразу). Нет, я не думаю, что длина может быть проблемой - это было мое первое предположение, потому что у меня всегда были подобные проблемы в прошлом. Paolo 6 лет назад 0
Может быть, просто несвязанная ошибка, которая переводится как ошибка без пробела. arielnmz 6 лет назад 0
@arielnmz: Возможно, но я не знаю, какая именно ошибка, так как при выполнении примеров, приведенных выше, это детерминированное поведение, и создаваемые каталоги и файлы являются допустимыми (как подтверждает обходной путь с касанием). Paolo 6 лет назад 0
Вы пытались копировать с отключенным кешем / буфером? или синхронизированная копия? Rsync? arielnmz 6 лет назад 0

0 ответов на вопрос