Назад | Перейти на главную страницу

Безопасность одновременной записи в самба и перемещения на Perl

У меня есть самба (3.6.3-0.30.1-2920-SUSE-CODE11-x86_64), работающая на сервере SLES11, который получает файлы с машины Windows. Общий ресурс samba на самом деле является монтированием NFS с другого сервера, и мне нужно использовать strict locking = no в smb.conf.

По причинам, которые я не могу контролировать, эти файлы помещаются в очень неглубокую структуру каталогов. Затем мне нужно переместить эти файлы из источника в место назначения где-нибудь еще на общем ресурсе с более глубокой структурой каталогов (в основном разделение, сопоставление и добавление дат). Я создал сценарий perl (v5.10.0), который обнаруживает эти исходные файлы, определяет цель и затем перемещает файл в место назначения с помощью move функция от File::Copy.

Могут ли мои файлы быть повреждены? Файлы довольно маленькие, но их много, так что это событие не совсем маловероятно. Будет ли файл поврежден, или самба продолжит запись в новое место, даже не видя, что файл перемещается? Или делает File::Copy знает, что файл уже используется, и прервет выполнение сценария? (Я использую move($src, $dst) or die "Cannot move file $src to $dst: $!")

В более общем плане, безопасен ли такой способ разрешения ситуации или есть лучший способ сделать это?

Я провел несколько тестов с очень большими файлами, и они оказались правильными, хотя move был вызван до записи файла. Я думаю, это означает «да».