файлова система дисків для RAID на Synolodgy NAS

SSD, HDD, Flash и прочие носители информации
Ответить
Автор
Сообщение
Jay228
Member
Аватара пользователя

Сообщение

Маю Synolodgy NAS DS233 здвума дисками .
На ньому створюю RAID 1 для бекапів . файлові системи на вибір дає тільки ext4 і Btrfs .
і тут виникає проблема . коли роблю бекап трапляються файли з довгими імінеами і бекап спиняється . їх дуже багато і виловити їх та перейменувати не варіант .

Підкажіть чи є якийсь спосіб змінити файлову систему рейду чи в ext4 і Btrfs обійти це обмеження на кількість символів
Shpoker
Member
Откуда: Киев

Сообщение

Jay228: 18.12.2024 10:07ext4 і Btrfs обійти це обмеження на кількість символів
Нет, там жесткий лимит.

Отправлено спустя 2 минуты 1 секунду:
Jay228: 18.12.2024 10:07їх дуже багато і виловити їх та перейменувати не варіант .
Так скриптом в 5 строк можно всё выловить, делаешь рекурсивный листинг всего и если строка длиннее чем х, то пишешь ее в лог
А что б автоматом переименовать потом - нужно паттерн придумать, может достаточно будет пару уровней папок убрать да и всё.
Jay228
Member
Аватара пользователя

Сообщение

Shpoker
так навіть якщо знайти ті файли їх може виявитись тисячі.

а на NTFS превести рейд 1 в сінолоджі не можна ?
Shpoker
Member
Откуда: Киев

Сообщение

Jay228
В нтфсе ТАКОЙ ЖЕ лимит :laugh: . Про синолоджи ничего не знаю и знать не хочу, но подозреваю что там линукс, для которого нтфс драйвер - боль

Отправлено спустя 3 минуты 8 секунд:
Делай свои бэкапы в /b/... Что добавит в путь всего 2 символа, а не в какой-то /home/user/documents/backups/date/...
Может у тебя лимит длинны пути сработал, а не конкретно имени файла
Jay228
Member
Аватара пользователя

Сообщение

Shpoker
бекап зробив локально спочатку на звичайний юсб диск . це щоб по мережі не гнати і не забивати тим самим трафік для працюючих користувачів.
і от локально все переписалось на ntfs диск . хоча там теж наче обмеження по довжині файлу та шляху. як таке може бути не знаю
Shpoker
Member
Откуда: Киев

Сообщение

Jay228
Так у тебя стопорится на записи или чтении с диска? И реально понять бы проблема точно в имени файла или в пути. Бо я не понимаю как можно без ошибки создать файл с длинным именем, но отлично знаю как испортить путь к файлу так что б с ним нельзя было работать.
Jay228
Member
Аватара пользователя

Сообщение

Shpoker
теж не зрозуміло як дало створити ці файли взагалі
зараз по пунктам розкладу
1.файловий сервер на віндовс сервер до нього підключаю юсб диск і преписую всі папки - все ок.
2. підєдную цей юсб диск з копією данних по юсб до сінолоджі . і прямо в ньому в веб інтерфейсі копіюю - та вискакує ця помилка довжини
Васильович
Member
Аватара пользователя

Сообщение

Jay228: 18.12.2024 11:391.файловий сервер на віндовс сервер до нього підключаю юсб диск і преписую всі папки - все ок.
Я просто архівував би потрібні файли з сервера прямо на USB диск, а вже архів на NAS скидав.
Jay228
Member
Аватара пользователя

Сообщение

Васильович
цей варіант теж розгладаю на самий крайній варіант. тому що до файлів бекапу теж треба буде доступ оперативний. а якщо вони будуть в архіві це не підходить
Dremjke
Member
Аватара пользователя
Откуда: Україна

Сообщение

Спецификация этого NASа гласит следующее.
Делайте выводы.
Shpoker
Member
Откуда: Киев

Сообщение

Jay228: 18.12.2024 11:39і прямо в ньому в веб інтерфейсі копіюю - та вискакує ця помилка довжини
Так какая ошибка то? Что не может прочитать или не может записать? :gigi:
Jay228
Member
Аватара пользователя

Сообщение

Shpoker
записати. через довжину файлу. довжина папок теж не скрізь адекватна лае думаю в ліміт поміщається.
нажаль скрипти не вмію писати. а немає програмки яка б такі випадки аналізувала ?

ще шукаючи наткнувся на таку статтю -
спойлер
https://learn.microsoft.com/ru-ru/windo ... s=registry
тобто на самому сервері де лежать файли можливо змінили цей ліміт.
але тоді я не розумію чи має це вплив на файлову систему самого диску . і слідучим питанням іде те чи можна на цьому нас теж включити такий анліміт для його внутрішних дисків
Shpoker
Member
Откуда: Киев

Сообщение

Jay228
Подведем итоги, раз в нтфс и в ехт4 длинна имен файлов разрешена одинаковая и файл записался - то проблема с длинным путем до файла. Раз считать можешь а записать нет - то путь монтирования нтфс в твой нас короче, чем путь монтирования бэкап папки. Перемонтируй/пересоздай/ конечную папку в корне, обозвав ее одной буквой, дай юзерам права на запись в нее и скопируй свой бэкап с путем который стал короче (джава сорцы какие-то?)

Отправлено спустя 2 минуты 35 секунд:
Jay228: 18.12.2024 11:39прямо в ньому в веб інтерфейсі
Вот тут тоже может быть проблема криворуких индусов

Отправлено спустя 3 минуты 17 секунд:
Jay228: 18.12.2024 15:02нажаль скрипти не вмію писати
А вот это печаль, тогда в линуксе делать нечего, в любом случае, спросить 2 фразы у гугла
1) bash list all disk files with full path
2) bash count symbols in each line
И получить со стековерфлоу 2 комманды и цикл фор, которые правильно впереть в скрипт - пригодится в жизни
vladdelkafa
Member
Откуда: Киев

Сообщение

Я себе под Windows/PowerShell написал скрипт, мб кому пригодится.
спойлер

Код: Выделить всё

# PATH LENGTH CHECKER by 64U

# if getting Execution Policy related error while running, use command below:
# Set-ExecutionPolicy Bypass

# By default the script will recursively scan a folder from which it's invoked
# Alternatively you can run it with param to scan specified folder like:
# .\plc.ps1 -path "C:\Different\Path"
# Also you can us threshold variable
# .\plc.ps1 -path "C:\Different\Path" -threshold 150

# FYI
# While Windows' standard file system (NTFS) supports paths up to 65,535 characters, 
# Windows imposes a maximum path length of 255 characters (without drive letter), the value of the constant MAX_PATH.

# DEFAULT PARAMS
# We're using threshold = 259 since unicode adding \\?\ prefix to the basic path
param (
    [string]$path = ( Split-Path -Parent $MyInvocation.MyCommand.Path ),
    [int]$threshold = 259,
    [switch]$consolelog = $true,
    [switch]$singlelog = $false,
    [switch]$clearscreen = $true,
    [switch]$logfilenamesonly = $false
)

$rev = "241219-7"

# GET CURRENT SCRIPT PATH
$scriptPath = Split-Path -Parent $MyInvocation.MyCommand.Path

# DEFINE PATH VARIABLE efine path variable with default value
$path = if ($path) { $path } else { $scriptPath }

# YOU CAN ALSO UNCOMMENT LINE BELOW AND SET FIXED PATH FOR CHECKUP
# $path = "C:\Downloads\"

# LOG FILE NAMING
$logDate = Get-Date -Format "yyyyMMdd_HHmmss"
$logFile = Join-Path $scriptPath "plc_$logDate.log"
# LOG FILE WITH FILE NAMES ONLY
$logFile_fo = Join-Path $scriptPath "plc_$logDate.fo.log"

# ENABLING LONG PATH SUPPORT VIA REGISTRY (requires admin rights)
Set-ItemProperty 'HKLM:\System\CurrentControlSet\Control\FileSystem' -Name 'LongPathsEnabled' -Value 1 -Type DWord

# ADDING INITIAL LOG ENTRY
if ($singlelog) {
    $logFile = Join-Path $scriptPath "plc.main.log"
    $logFile_fo = Join-Path $scriptPath "plc.fo.log"
    "########################################" | Out-File -FilePath $logFile -Append
    "Log created on $(Get-Date)" | Out-File -FilePath $logFile -Append
    "Scan path: $path" | Out-File -FilePath $logFile -Append
    "########################################" | Out-File -FilePath $logFile -Append
    "########################################" | Out-File -FilePath $logFile_fo -Append
    "Log created on $(Get-Date)" | Out-File -FilePath $logFile_fo -Append
    "Scan path: $path" | Out-File -FilePath $logFile_fo -Append
    "########################################" | Out-File -FilePath $logFile_fo -Append
} else {
    "########################################" | Out-File -FilePath $logFile
    "Log created on $(Get-Date)" | Out-File -FilePath $logFile -Append
    "Scan path: $path" | Out-File -FilePath $logFile -Append
    "########################################" | Out-File -FilePath $logFile -Append
    "########################################" | Out-File -FilePath $logFile_fo
    "Log created on $(Get-Date)" | Out-File -FilePath $logFile_fo -Append
    "Scan path: $path" | Out-File -FilePath $logFile_fo -Append
    "########################################" | Out-File -FilePath $logFile_fo -Append
}

if ($clearscreen) {
  clear
}

Write-Host -NoNewLine -ForegroundColor Green 'PATH LENGTH CHECKER by 64U '; Write-Host -ForegroundColor Gray 'revision' $rev `n

if ($singlelog) {
    echo "Using a single log file scheme, with appended data. `n"
} else {
    echo "Log file created on $(Get-Date) `n"
}

echo "Checking for files:"
echo "- with path length longer than $threshold symbols"
echo "- within $path `n"

if ($consolelog) {
  echo "Listing problematic files below (if any)"
}

# USING UNICODE PATH PREFIX FOR HANDLING LONG PATHS
$longPath = "\\?\$path"

# MAIN SCAN FOR LONG PATHS (using -LiteralPath)
Get-ChildItem -LiteralPath $longPath -Recurse -Force | 
    Select-Object FullName, @{Name="PathLength";Expression={$_.FullName.Length}} |
    Where-Object {$_.PathLength -gt $threshold} |
    ForEach-Object {
        if ($consolelog) {
            Write-Host -ForegroundColor DarkYellow $($_.FullName)
        }
        "[$($_.PathLength) characters] $($_.FullName)" | 
        Out-File -FilePath $logFile -Append
        "$($_.FullName)" | 
        Out-File -FilePath $logFile_fo -Append
    }

Можно просто скопировать код, создать файл plc.ps1, вставить туда код, сохранить.
Дальше просто кинуть файл туда, откуда нужно провести рекурсивное сканирование.
Правый клик -> Run with PowerShell.

Скрипт по умолчанию сканирует всё, что находится в директории рядом с собой (и ниже по структуре) и логгирует все объекты, превышающие стандартный лимит.
На выходе положит рядом с собой два лога: в одном только имена проблемных файлов, в другом - с длиной пути к ним в качестве префикса.
Если запускать через консоль, там тоже всё логгируется ессно.
спойлер
Screenshot 2024-12-19 092637.png

Также заложены некоторые параметры, из полезных: -singlelog -path и -threshold
Т.е. если хотим просканировать директорию C:\Useless на файлы, у которых путь длиннее 150-ти символов и не хотим плодить логи, то юзаем:
.\plc.ps1 -path "C:\Useless" -threshold 150 -singlelog

В целом это всё больше от софта зависит.
Виндовый проводник (win11 23H2) вот у меня без проблем читает файлы с избыточной длиной пути, но писать такой файл уже не хочет и лишние символы отрезает.
А тот же totalcmd писать - пишет (прокидывая алерт на всякий), но читать уже нормально не хочет :D
Jay228
Member
Аватара пользователя

Сообщение

Shpoker
ще буду пробувати не напряму с юсб підключеного до нас а по мережі прегнати на нас с під вінди . через тотал командер . він в таких випадках буде питати чи залишати таку довжину шляху. але не факт що поможе . і це не в робочий час щоб трафік не забивати .

по другому пункту згоден . система має бути більш гнучкою для налаштування . їх DSM все ж таки лінуксоїдний

3й пункт. не дуже зрозумів. зараз у мене файли та їх повний бекап не на лінуксі а в вінді . тож може не обовязково використовувати скріпти а є якайсь віндовс програмка яка чекає довжину файлів ?

Відправлено через 11 хвилин :
а -threshold чому саме 150 ?
В целом это всё больше от софта зависит.
Виндовый проводник (win11 23H2) вот у меня без проблем читает файлы с избыточной длиной пути, но писать такой файл уже не хочет и лишние символы отрезает.
А тот же totalcmd писать - пишет (прокидывая алерт на всякий), но читать уже нормально не хочет
так навіть якщо зчитає і відкриє то все рівно можуть вилазити якісь косяки. наприклад відкрили такий 255+ символьний фалик і пустили на друк ... і все , потрібно буде презавантажувати мережевий прінтер )
vladdelkafa
Member
Откуда: Киев

Сообщение

Jay228: 19.12.2024 10:13 а -threshold чому саме 150 ?
Це під специфічні завдання.
Зазвичай цей парам можна не чіпати - по дефолту там стоять коректні 259 (255 + \\?\ додані юнікодом).

Jay228: 19.12.2024 10:13 так навіть якщо зчитає і відкриє то все рівно можуть вилазити якісь косяки. наприклад відкрили такий 255+ символьний фалик і пустили на друк ... і все , потрібно буде презавантажувати мережевий прінтер )
Тут Windows Explorer скоріше допомагає такі файли швидко забрати та кудись (на більш короткий шлях) перенести.
Jay228
Member
Аватара пользователя

Сообщение

vladdelkafa
Shpoker
так вже день йде копіювання через тотал прямо з вінди. поки пмилок немає. єдино що вякийсь момент перестав відображаться процес копіювання в тоталі але сама шкала копіювання на значку є. побачим що з цього вийде :spy:
Jay228
Member
Аватара пользователя

Сообщение

vladdelkafa
Shpoker
наче все переписалось . до біта не порівнював бо дуже багато папок . також виявилось що надеякі папки в мене банально не було доступу. але це позаду.

і ще зустрілась така помилка
спойлер
Изображение
натиснув претворити все. це нормально ?
Shpoker
Member
Откуда: Киев

Сообщение

Jay228
Ах ты ж ё, русский текст да еще и с пробелами... Там жеж длинна делится на 2 шо в пути шо в названии
Да, нормально.
Jay228
Member
Аватара пользователя

Сообщение

Shpoker
сам факт мене дивує що через тотал пустило . виходить помилка в довжині проявляється тільки при внутрішньому преміщенні між дисками в самій системі Nas .

дякую за допомогу
Ответить