У меня есть самба (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
был вызван до записи файла. Я думаю, это означает «да».