#ubuntu #unlink #gnu-parallel #virtual-server
#ubuntu #разъединение #gnu-parallel #виртуальный сервер
Вопрос:
Выполнялась локальная установка GNU Parallel на виртуальном сервере Ubuntu:
$uname -a
Linux #### 2.6.32-43-server #97-Ubuntu SMP Wed Sep 5 16:56:41 UTC 2012 x86_64 GNU/Linux
при параллельном запуске я получаю следующую ошибку в STDERR:
$parallel echo ::: A B C
Error unlinking file ./rTrUcTv2ZS using unlink0 at /home/######/bin/parallel line 5529
Есть предложения о том, что это значит и как это исправить?
Вещи, которые я уже изучил:
- разрешения У меня есть разрешения на чтение и запись для всех файлов и в каталоге.
- неправильная установка Это может быть неправильная установка. Для установки я использовал
./configure --prefix=$HOME
. Вот вывод configure.log:This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by parallel configure 20140622, which was generated by GNU Autoconf 2.69. Invocation command line was $ ./configure --prefix=/home/###### ## --------- ## ## Platform. ## ## --------- ## hostname = ###### uname -m = x86_64 uname -r = 2.6.32-43-server uname -s = Linux uname -v = #97-Ubuntu SMP Wed Sep 5 16:56:41 UTC 2012 /usr/bin/uname -p = unknown /bin/uname -X = unknown /bin/arch = unknown /usr/bin/arch -k = unknown /usr/convex/getsysinfo = unknown /usr/bin/hostinfo = unknown /bin/machine = unknown /usr/bin/oslevel = unknown /bin/universe = unknown
Любопытно, что отсутствует uname -p
.
lscpu показывает:
Architecture: x86_64
CPU op-mode(s): 64-bit
CPU(s): 48
Thread(s) per core: 1
Core(s) per socket: 12
CPU socket(s): 4
NUMA node(s): 8
Vendor ID: AuthenticAMD
CPU family: 16
Model: 9
Stepping: 1
CPU MHz: 800.000
Virtualization: AMD-V
L1d cache: 64K
L1i cache: 64K
L2 cache: 512K
L3 cache: 5118K
Ответ №1:
Вы не написали, какую версию используете, но строка, вызывающая проблему, вероятно:
$disk_full_fh = ::tempfile();
Который позже используется для проверки возможности записи дополнительных данных в файловую систему буферизации.
Довольно удивительно, что это может вызвать какие-либо проблемы, поскольку tempfile()
широко используется GNU Parallel. Возможно, вы захотите выполнить процедуру подачи отчета об ошибке (см. LESS= /^REPORTING man parallel
).
Мое лучшее предположение заключается в том, что $TMPDIR (который по умолчанию равен /tmp ) является каким-то особенным в вашей системе. Попробуйте использовать —tmpdir и установите для него другой каталог.
Комментарии:
1. Спасибо за ответ, Танге. Я использую последнюю версию 20140622 . В моей домашней папке я запустил
$mkdir tmp
$parallel --tmpdir /home/######/tmp echo ::: A B C
и получаю ту же ошибку:Error unlinking file /home/#####/tmp/abGj865_j4 using unlink0 at /home/######/bin/parallel line 5529
Я также воспользовался вашим советом и, следуя процедуре регистрации ошибок: я загрузил ubuntu Server 10.04.2 с virtualboxes.org/images/ubuntu-server . Я выполнил локальную установку этого образа и не обнаружил ошибки .2. Кроме того,
$perl -v
показываетThis is perl, v5.10.1 (*) built for x86_64-linux-gnu-thread-multi ...
3. Таким образом, мы можем заключить, что проблема в вашей системе не может быть воспроизведена в virtualbox. Какая файловая система /home/######/tmp? Если это файловая система, в которой вы не можете разблокировать открытый файл, это может объяснить поведение. Посмотрите, сможете ли вы воспроизвести проблему на других системах, чтобы мы могли выяснить, что является общим для них.
4. Еще раз спасибо Tange за правильное определение проблемы. Мой домашний каталог в этой системе — том NFS . Это объясняет ошибку отключения: NFS плохо работает с модулем File::Temp: http://perldoc.perl.org/File/Temp.html . Я исправил проблему, установив для моей переменной среды $ TMPDIR значение, одобренное моим системным администратором на томе ext4.
Ответ №2:
Оказывается, ошибка отключения — это конфликт между файловой системой NFS моего домашнего каталога и использованием parallel модуля File::Temp:
> «Наконец, в файловых системах NFS количество ссылок в дескрипторе файла не всегда обнуляется сразу после разъединения. В настоящее время ожидается сбой этой команды на дисках NFS «.
Файл perldoc::Временный модуль
Чтобы исправить ситуацию, я попросил у своего системного администратора привязанный каталог на томе, содержащий корневую папку, которая находилась в файловой системе ext4. Затем я добавил добавил это в свои переменные среды в $ TMPDIR с:
export TMPDIR=/to/the/directory
Я также добавил эту строку в .bash_profile
Ответ №3:
Теперь я смог воспроизвести ошибку. Это исправлено в новейшей версии git и будет включено в версию 20140922 (исправление сумасшедшее, но, похоже, оно работает).
Пожалуйста, проверьте это.