Я успешно использую UrBackup около двух недель как с локальными, так и с удаленными клиентами. Мой сервер — это ПК с Windows.
Однако недавно я испортил размер раздела целевого места резервного копирования, и теперь все резервные копии, которые я пытаюсь выполнить с клиента, установленного на моем сервере, не будут завершены. Стоит отметить, что все остальные резервные копии, с локальных и удаленных клиентов, выполняются успешно.
Вот журнал неудачного резервного копирования на этом ПК:
Запуск незапланированного полного резервного копирования файлов…
Не выбрано никаких компонентов для резервного копирования
Перезапуск теневой копии J: , поскольку она была запущена этим сервером
Индексирование «рабочего стола» выполнено. 8 запросов в файловой системе 0 запросов в БД и 0 обновлений в БД
Индексирование «Загрузок» выполнено. 1 поиск в файловой системе 0 просмотров в БД и 0 обновлений в БД
Индексирование «документов» выполнено. 64 поиска в файловой системе 0 запросов в db и 0 обновлений в db
Индексирование «Музыка» выполнено. 131 поиск в файловой системе 0 запросов в БД и 0 обновлений в БД
Индексирование «изображений» выполнено. 302 поиска в файловой системе 0 запросов в БД и 0 обновлений в БД
Индексирование «Видео» выполнено. 2 поиска в файловой системе 0 просмотров в БД и 0 обновлений в БД
Перезапуск теневой копии C: , потому что она была запущена этим сервером
Индексирование «Общедоступного» завершено. 16 запросов в файловой системе 0 запросов в БД и 0 обновлений в БД
Индексирование «Архива» выполнено. 334 поиска в файловой системе 0 просмотров в БД и 0 обновлений в БД
Пользователь-ПК: загрузка списка файлов…
Ошибка при получении списка файлов для пользовательского ПК. Код ошибки: CANNOT_OPEN_FILE (3)
При резервном копировании произошла ранняя ошибка. Удаление частичной резервной копии.
Я нашел только одну ветку с аналогичным сообщением об ошибке. Мне непонятно, что рекомендует отвечающий; неясно, связано ли это с моей проблемой.
Если бы кто-нибудь мог помочь, я был бы очень признателен.
Спасибо!
Изменить: Возможно, @uroni может взглянуть и посмотреть, есть ли та же проблема, что и в другом потоке? Если это так, я был бы признателен за подробное описание вашего предложения.
Обновить на случай, если кто-то обнаружит это при поиске:
Когда я выполнял изменение размера раздела, я, похоже, испортил некоторые файлы/сектора диска. При повторной попытке резервного копирования я получил следующую ошибку:
Не удалось создать каталог «M: UrBackup My Documents My Music Unknown Artist». — Ошибка данных (циклический контроль избыточности). (код: 23)
Неустранимая ошибка во время резервного копирования. Резервное копирование не завершено
FATAL: Резервное копирование не удалось из-за проблем с диском (см. Предыдущие сообщения)
Резервное копирование не удалось
Очевидно Проверки циклическим избыточным кодом связаны с логическим или физическим повреждением жесткого диска. Выполнение chkdsk — это первое, что нужно попытаться исправить. Однако в моем случае это заняло бы дни, а это всего лишь резервные копии, поэтому я отформатировал диск и начал все заново. После форматирования я запустил файлы UrBackup .bat «remove_unknown» и «cleanup_database», чтобы избавиться от старых резервных копий на сервере. Кажется, проблема решена. Новые резервные копии работают без ошибок.
ошибка при перечислении файлов в каталоге
У меня есть класс java для перечисления файлов в данном каталоге. Он отлично работает с каталогами только с файлами и без подкаталогов. Но если внутри есть дочерний каталог, это дает исключение java.lang.StackOverflowError. Вот класс вместе с методом main ():
package test; import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; открытый класс DisplayFilesAndFolders {public static void main (String [] args) {попробуйте {List files = getFileList (); для (Файл файл: файлы) {System.out.println (файл); }} catch (исключение e) {e.printStackTrace (); }} общедоступный статический список getFileList () выдает исключение FileNotFoundException {String sPath = "C: \ Users \ owner \ Desktop \ Screen Shot \"; Файл filePath = новый файл (sPath); Список fileList = новый список массивов (); Файл [] files = filePath.listFiles (); Список fileandFolderList = Arrays.asList (files); для (Файл файл: fileandFolderList) {fileList.add (файл); если (file.isDirectory ()) {Список innerFileList = getFileList (); fileList.addAll (innerFileList); }} return fileList; }}
Спасибо за ваше время.
Вам нужно взять корень getFileList
search в качестве параметра и передавайте подкаталог в качестве аргумента каждый раз при рекурсии. (В настоящее время вы начинаете с C: Users owner Desktop Screen Shot
в каждом рекурсивном вызове.)
Попробуйте следующее (это работает как и предполагалось в моей системе):
public class Test {public static void main (String [] args) {try {String root = "C: \ Users \ owner \ Рабочий стол \ Снимок экрана \ "; Список файлов = getFileList (новый файл (корень)); для (Файл файл: файлы) {System.out.println (файл); }} catch (исключение e) {e.printStackTrace (); }} общедоступный статический список getFileList (File filePath) выдает исключение FileNotFoundException {List fileList = new ArrayList (); Файл [] files = filePath.listFiles (); Список fileandFolderList = Arrays.asList (files); для (Файл файл: fileandFolderList) {fileList.add (файл); если (file.isDirectory ()) {Список innerFileList = getFileList (файл); fileList.addAll (innerFileList); }} return fileList; }}
I Раньше реализовывал что-то вроде вашего метода, а также получил исключение StackOverflowException, потому что я не проверял, является ли файл символической ссылкой. Если вы вызовете isDirectory
для символической ссылки, указывающей на каталог, она вернет true
. Таким образом, вы будете следовать по символической ссылке, которая может указывать куда угодно, что может привести к бесконечному обходу дерева, что приведет к исключению StackOverflowException..
-
вы можете приведи пример «символьной ссылки»? — tusar 13 сен. ’11 в 15:19
-
2unix> man ln Ищите флаг -s. Когда вы «ls -l» они выглядят так: a -> some/other/dir/a Стрелка — это ключ. — Крис, 13 сентября 2011 г., 15:22
-
Статья, в которой описывается, как создавать символические ссылки в Windows, чтобы вы могли видеть, как ваш код обрабатывает их: windows7home.net/how-to-create-symbolic-link-in -windows-7 — user212218 15 сен., 15:40
-
@Phoenix и Оливер Вейлер, не могли бы вы взглянуть на мою другую проблему (не связанную с этим). Мне нужна ваша помощь, ребята. Спасибо за ваше время. stackoverflow.com/q/8937158/778687 — tusar 3 апр. ’12 в 17:41
Я реализовал что-то вроде вашего метода раньше, а также получил исключение StackOverflowException, поскольку я не проверял, является ли файл символической ссылкой . Если вы вызовете isDirectory
для символической ссылки, указывающей на каталог, она вернет true
. Таким образом, вы будете следовать по символической ссылке, которая может указывать куда угодно, что может привести к бесконечному обходу дерева, что приведет к исключению StackOverflowException.