BigAp.ru — интернет-магазин электроники и бытовой техники

Автор Тема: Windows server 2012 и длинные названия бэкапов  (Прочитано 5772 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Kastiel318

  • Пользователь
  • **
  • Сообщений: 95
  • Karma: +2/-0
  • Пол: Мужской
    • Share Post
Коротко о проблеме.
Есть файловый сервак, который с помощью скрипта сливает бэкап на другой сервер, там бэкап лежит 7 дней, за это время делается еще три - четыре бэкапа, так вот есть скрипт (не мной написанный ) который самый последниц бэкап удаляет. Беда  в том что есть куча файлов который содержат мега длинные названия, и powershell с ними не справляется.
Пока пытаюсь найти решение в гугле, но может Вы что подскажите?

 

Оффлайн MFlyagin

  • Сообщество ИТ-Специалистов
  • Опытный пользователь
  • ***
  • Сообщений: 135
  • Karma: +17/-1
  • Пол: Мужской
    • Share Post
Windows server 2012 и длинные названия бэкапов
« Ответ #1 : Май 08, 2015, 12:26:26 pm »
- Как именно не справляется?
- Как ошибка выглядит?
- Скрипты можешь показать?

Очень странно что PowerShell затыкается на длинных именах..
« Последнее редактирование: Май 11, 2015, 10:19:19 am от sysadmin »

Оффлайн Kastiel318

  • Пользователь
  • **
  • Сообщений: 95
  • Karma: +2/-0
  • Пол: Мужской
    • Share Post
Re: Windows server 2012
« Ответ #2 : Май 08, 2015, 01:40:25 pm »
 ver. 1.0
#===================================================

cls

$Date = Get-Date -Format yyyy-MM-dd_hhmmss
$SrcRoot = "D:\"
$BkpRoot = "\\тут имя пк\Share\Backup_Data\"
$BkpDateDir = "$BkpRoot\kz_$Date"
$BkpDepth = 10
$i = 0


New-Item $BkpDateDir -type directory

Get-ChildItem $SrcRoot | foreach {
    $SrcFullName = $_.FullName
    $BkpDir = ($BkpDateDir+"\"+$_.Name)
    robocopy $SrcFullName $BkpDir /copy:DTASO /E /ZB /MT:10 /R:10 /W:2 /NP | Out-File -Append "$BkpRoot\logs\$Date.log" -Encoding utf8
}

#robocopy "D:\папка\" "$BkpDir\!temp\" /copy:DTASO /E /ZB /MT:10 /R:10 /W:2 /NP | Out-File -Append "$BkpRoot\logs\$Date.log" -Encoding utf8
#robocopy "D:\папка\" "$BkpDir\Departmetns-02\" /copy:DTASO /E /ZB /MT:10 /R:10 /W:2 /NP | Out-File -Append "$BkpRoot\logs\$Date.log" -Encoding utf8
#robocopy "D:\папка\" "$BkpDir\File-Exchange\" /copy:DTASO /E /ZB /MT:10 /R:10 /W:2 /NP | Out-File -Append "$BkpRoot\logs\$Date.log" -Encoding utf8
#robocopy "D:\папкаl\" "$BkpDir\ForAll\" /copy:DTASO /E /ZB /MT:10 /R:10 /W:2 /NP | Out-File -Append "$BkpRoot\logs\$Date.log" -Encoding utf8
#robocopy "D:\папка\" "$BkpDir\LOCS\" /copy:DTASO /E /ZB /MT:10 /R:10 /W:2 /NP | Out-File -Append "$BkpRoot\logs\$Date.log" -Encoding utf8
#robocopy "D:\папка\" "$BkpDir\Public-Info\" /copy:DTASO /E /ZB /MT:10 /R:10 /W:2 /NP | Out-File -Append "$BkpRoot\logs\$Date.log" -Encoding utf8
#robocopy "D:\папка\" "$BkpDir\RemoteDesktopAPPs\" /copy:DTASO /E /ZB /MT:10 /R:10 /W:2 /NP | Out-File -Append "$BkpRoot\logs\$Date.log" -Encoding utf8
#robocopy "D:\папка\" "$BkpDir\Software\" /copy:DTASO /E /ZB /MT:10 /R:10 /W:2 /NP | Out-File -Append "$BkpRoot\logs\$Date.log" -Encoding utf8

#robocopy "$SrcDir" "$BkpDir" /XD '$RECYCLE.BIN' 'System Volume Information' /copy:DTASO /E /ZB /MT:10 /R:10 /W:2 /NP | Out-File -Append "$BkpRoot\logs\$Date.log" -Encoding utf8
#/XD -- exclude dirs
#/copy:DATSO -- copy data, attribs, timestamps, NTFS ACLs, owners
#/E -- copy subdirectories, including empty ones
#/ZB -- restartable mode, use backup mode if access denied
#/MT:10 -- multi-threading (10 threads)
#/R:10 /W:2 -- 10 retries, 2 seconds between retries
#/NP -- no progress, do not show % in output

#===================================================
# backups rotation
#===================================================
#$BkpArray += Get-ChildItem -Path $BkpRoot\*

#$BkpNumber = $BkpArray.count


#while ($BkpNumber -gt $BkpDepth)
#{
#  $BkpArray[$i] | Remove-Item -Force -Recurse -Confirm:$false
#  $BkpNumber -= 1
#  $i++
#}

#===================================================

есть три части скрипта:
1) объявление переменных
2) цикл с бекапом папок
3) цикл с ротацией бекапов
вот третья часть щас не работает, потому что слишком длинные пути. выдает ошибку, что не может удалить и все
поэтому я ее закоментил и удаляю руками

Надо добиться того чтобы заработала закоментированная часть с ротацией бекапов   :dash2: :dash2: :dash2:

Я мало что в этом скрипте понимаю...кроме путей  :facepalm:

смысл в том, что новый бекап делается, а самый старый при этом удаляется.
таким образом нужное количество бекапов остается заданным ($BkpDepth = 10), но они как барабан пистолета постоянно "вращаются", оставляя нужные и удаляя не нужные

Понятное дело что самый простой вариант это переименовать то Гамно которое содержит длинные пути...НО можно это как-то еще решить?
« Последнее редактирование: Май 12, 2015, 08:54:39 pm от sysadmin »

Оффлайн MFlyagin

  • Сообщество ИТ-Специалистов
  • Опытный пользователь
  • ***
  • Сообщений: 135
  • Karma: +17/-1
  • Пол: Мужской
    • Share Post
Windows server 2012 и длинные названия бэкапов
« Ответ #3 : Май 08, 2015, 02:05:37 pm »
Да я знаю что такое ротация бэкапов  :smile3:
А как ошибка выглядит? Очень странно что павершелл затыкается на длинных именах.

Мне кажется проблема не в длинных именах. Можешь в папке BkpRoot выполнить Get-ChildItem и показать вывод?
« Последнее редактирование: Май 12, 2015, 08:55:43 pm от sysadmin »

Оффлайн Kastiel318

  • Пользователь
  • **
  • Сообщений: 95
  • Karma: +2/-0
  • Пол: Мужской
    • Share Post
Re: Windows server 2012
« Ответ #4 : Май 08, 2015, 02:09:53 pm »
Работу скрипта сам не видел. со слов приблеженного - она просто пропускает файлы с длинными именами и начинает херачить другие бэкапы, удаляя все что есть в папках ))))

Пока решил проверить все на своем ноуте, изменил в скрипте и теперь юэкап льётся на мою тачку, как будет результат напишу сюда.
« Последнее редактирование: Май 12, 2015, 08:56:09 pm от sysadmin »

Оффлайн MFlyagin

  • Сообщество ИТ-Специалистов
  • Опытный пользователь
  • ***
  • Сообщений: 135
  • Karma: +17/-1
  • Пол: Мужской
    • Share Post
Windows server 2012 и длинные названия бэкапов
« Ответ #5 : Май 08, 2015, 03:21:54 pm »
А че вывод команды зажал?  Эта команда аналог dir ничего плохого она тебе не сделает  :ggg:
« Последнее редактирование: Май 12, 2015, 08:59:48 pm от sysadmin »

Оффлайн Kastiel318

  • Пользователь
  • **
  • Сообщений: 95
  • Karma: +2/-0
  • Пол: Мужской
    • Share Post
Re: Windows server 2012
« Ответ #6 : Май 08, 2015, 04:00:22 pm »
Дык нету его еще у меня) Бэкапов то еще с которыми играться можно тоже нету.

Ну так а толку то...вывела она список папок и что? Файлы в папках она не показывает.

А кроме того что - ПРИКОЛЬНО БЫЛО БЫ УЗНАТЬ ЧТО У НЕГО ЗА ПАПКИ И ФАЙЛЫ...
Еще идеи есть?
« Последнее редактирование: Май 12, 2015, 09:01:21 pm от sysadmin »

Оффлайн MFlyagin

  • Сообщество ИТ-Специалистов
  • Опытный пользователь
  • ***
  • Сообщений: 135
  • Karma: +17/-1
  • Пол: Мужской
    • Share Post
Windows server 2012 и длинные названия бэкапов
« Ответ #7 : Май 08, 2015, 04:18:17 pm »
Так это не для того чтобы посмотреть твои папки.
У тебя в скрипте из вывода этой команды формируется массив объектов, которые потом удаляются по очереди, пока их не останется 10. И вот от вывода этой команды зависит в каком порядке удаляются файлы, косяк в том месте где формируется список объектов на удаление а не в длине имен
« Последнее редактирование: Май 12, 2015, 09:02:15 pm от sysadmin »

Оффлайн MFlyagin

  • Сообщество ИТ-Специалистов
  • Опытный пользователь
  • ***
  • Сообщений: 135
  • Karma: +17/-1
  • Пол: Мужской
    • Share Post
Windows server 2012 и длинные названия бэкапов
« Ответ #8 : Май 08, 2015, 04:28:40 pm »
ну значит косяк в том месте где формируется список объектов на удаление а не в длине имен

Оффлайн Kastiel318

  • Пользователь
  • **
  • Сообщений: 95
  • Karma: +2/-0
  • Пол: Мужской
    • Share Post
Windows server 2012 и длинные названия бэкапов
« Ответ #9 : Май 08, 2015, 04:29:47 pm »
# backups rotation
#===================================================
#$BkpArray += Get-ChildItem -Path $BkpRoot\*
Где именно?

#$BkpNumber = $BkpArray.count


#while ($BkpNumber -gt $BkpDepth)
#{
#  $BkpArray[$i] | Remove-Item -Force -Recurse -Confirm:$false
#  $BkpNumber -= 1
#  $i++
#}
« Последнее редактирование: Май 12, 2015, 09:02:50 pm от sysadmin »

Оффлайн MFlyagin

  • Сообщество ИТ-Специалистов
  • Опытный пользователь
  • ***
  • Сообщений: 135
  • Karma: +17/-1
  • Пол: Мужской
    • Share Post
Windows server 2012 и длинные названия бэкапов
« Ответ #10 : Май 08, 2015, 04:46:53 pm »
# backups rotation
#===================================================
#$BkpArray += Get-ChildItem -Path $BkpRoot\*
создает массив из объектов в папке $BkpRoot (переменная с путем объявлена где-то выше)

#$BkpNumber = $BkpArray.count
приравнивает $BkpNumber количеству объектов в предыдущем массиве

#while ($BkpNumber -gt $BkpDepth)
пока $BkpNumber больше 10 делает цикл

#{
#  $BkpArray[$i] | Remove-Item -Force -Recurse -Confirm:$false
удаляет объект номер $i из массива $BkpArray

#  $BkpNumber -= 1
уменьшает значение на 1

#  $i++ 
увеличивает значение на 1

Следовательно этот код берет вывод команды Get-ChildItem -Path $BkpRoot\* и удаляет начиная с первого объекта по порядку пока не останется 10. Следовательно надо смотреть вывод этой команды. Как она выдаст в таком порядке и будут удаляться объекты.

Собственно для этого я и просил вывод, а не на папочки твои посмотреть.
« Последнее редактирование: Май 12, 2015, 09:05:53 pm от sysadmin »

Оффлайн sysadmin

  • Administrator
  • сисадми́н
  • *****
  • Сообщений: 8251
  • Karma: +112/-0
  • Пол: Мужской
    • Share Post
    • сайт для сис. админов и не только...
Windows server 2012 и длинные названия бэкапов
« Ответ #11 : Май 11, 2015, 10:17:19 am »
Проблема может быть в длинном пути + длинном названии бэкапов, проверь что бы путь + название бэкапа были меньше 254 символов в совокупности считая слеши в пути...

Когда то встречался с аналогичной проблемой, специально для этого написал программку, которая считает количество символов с строке:

Не плохо было бы посмотреть какую ошибку скрипт выдает, если выдает...
« Последнее редактирование: Май 12, 2015, 09:07:28 pm от sysadmin »
дорогу осилит идущий...
......................
MCP, MCTS, RHCSA
......................
also aka xck...

Оффлайн Kastiel318

  • Пользователь
  • **
  • Сообщений: 95
  • Karma: +2/-0
  • Пол: Мужской
    • Share Post
Re: Windows server 2012 и длинные названия бэкапов
« Ответ #12 : Май 12, 2015, 10:55:26 am »
Вообщем буду пробовать сделать след, сейчас все бэкапы боевые и доступа у меня к ним нету, изменил скрипт чтоб сливались они ко мне, сделаю два бэкапа, и тогда уже начну удалять, как писали мне москвичи - ошибок вроде нет, он просто пропускает те, что с длинными названиями и все, их тоталом удалять потом приходится.
как будет результат дам знать.
« Последнее редактирование: Май 12, 2015, 09:07:46 pm от sysadmin »

Оффлайн sysadmin

  • Administrator
  • сисадми́н
  • *****
  • Сообщений: 8251
  • Karma: +112/-0
  • Пол: Мужской
    • Share Post
    • сайт для сис. админов и не только...
Re: Windows server 2012 и длинные названия бэкапов
« Ответ #13 : Май 12, 2015, 09:08:24 pm »
Количество символов в пути к бэкапу вместе с названием бэкапа, слешами в пути, сколько составляет?

Цитировать
вот третья часть щас не работает, потому что слишком длинные пути. выдает ошибку, что не может удалить и все
Скрин или полный текст ошибки в студию..
« Последнее редактирование: Май 12, 2015, 09:17:24 pm от sysadmin »


xx
Маршрутизация Windows Server 2012 R2

Автор Actors_Spb

7 Ответов
474 Просмотров
Последний ответ Июль 21, 2016, 02:52:08 pm
от around
question
В чём разница (windows server 2003\2008\2012)?

Автор sysroman

4 Ответов
7507 Просмотров
Последний ответ Сентябрь 24, 2013, 12:40:39 pm
от sysadmin
xx
[Решено] Отчеты событий на email в Windows Server 2012 R2

Автор indicasativa

9 Ответов
717 Просмотров
Последний ответ Декабрь 22, 2015, 12:01:44 pm
от sysadmin
xx
Методы особождения дискового пространства! (Windows Server 2012)

Автор proskurin

13 Ответов
1927 Просмотров
Последний ответ Июль 28, 2014, 10:40:44 am
от proskurin