LINUX.ORG.RU

tar не может добавить файл в архив

 , , ,


0

1

Всем привет

Столкнулся с непонятным для меня поведением.

Вот есть скрипт:

IFS=$'\n'
path=/mnt/backup/some/dir
log_file=/tmp/arch.log
cmd=$(find $path -type f)
arch_name=arch_2016.tar.gz
arch_path=/mnt/backup/some/dir
arch_cmd (){
tar --use-compress-program=pigz -cpvf $arch_path$arch_name -T $log_file
}
echo "$cmd" > $log_file
arch_cmd
Его работа заключается в следующем: Ищет все файлы в нужном каталоге, добавляет список файлов в файл. Затем читая список файлов, архивирует их в указанный каталог. Путь к файлу - это сетевая шара cifs, в шаре есть скрытые файлы. Если запускать скрипт, то получаю много файлов, которые не могут добавиться в архив, и ругаются, вот так:
tar: /mnt/backup/some/dir/dir/dir/1405322438.M267333P29095.mail,S=6776,W=6932\:2,: Функция stat завершилась с ошибкой: Нет такого файла или каталога
Но в сетевой шаре такой путь есть. Как победить?

Ответ на: комментарий от crutch_master

Похоже, но у меня такой скрипт локально отработал нормально (с файлами, расположенными локально), магия с

IFS=$'\n'
нормально позволила все сделать. переноса строки разве мало будет?

Aborigen1020 ()
Последнее исправление: Aborigen1020 (всего исправлений: 1)
Ответ на: комментарий от Aborigen1020

Вангую косяки при передачи аргументов в tar. Попробуй кавычки поставить вокруг $log_file что-ли. Ну и удваиваю переписывание хотя бы на пистоне. Сдался вам этот баш с такими кульбитами.

crutch_master ★★★★★ ()
Ответ на: комментарий от Aborigen1020

когда освою не менее нужный bash

Есть вероятность, что к тому времени, когда ты научишься мастерски расставлять 40 различных видов кавычек, «нужный» bash станет ещё более ненужным.

EXL ★★★★★ ()
Ответ на: комментарий от lu4nik

Ага, подловил!
Но на самом деле в скрипте у меня стоит / , и имя архива формируется корректно. Да и была бы ошибка на несуществующий файл? Он бы его создал по этому пути, на уровень выше просто.

Aborigen1020 ()
Ответ на: комментарий от anonymous

что вообще предлагаете то? Сначала скачать 500гб по узкому каналу, сжать, и залить назад?

Так это можно и без всяких страшных вещей типа cat overlay.tar.gz >> /хэ/знает/где/backup.tar.gz делать.

Aborigen1020 ()
Ответ на: комментарий от anonymous

и пусть делает, я не буду сидеть и ждать момента, когда весь объем сначала перекопируется мне локально + я ограничен в локальном пространстве на ЖД.
Не покупать более объемный жд - тоже самообман?

Aborigen1020 ()

dovecot переименовывает файлы при изменениях флагов письма.

между find и tar может пройти много времени.

Поясни зачем отдельно искать файлы ?

Если есть проблемы с именами файлов, то нужно использовать

find ... -type f -print0 | tar ... --null -T -
vel ★★★★★ ()
Ответ на: комментарий от vel

я их начал искать через find, т.к. со стандартного вывода tar также не мог получить доступ к этим файлам, думал получу полный путь к файлу, а затем скормлю этот путь архиватору.

dovecot переименовывает файлы при изменениях флагов письма.

Зрите в корень. Но это старый maildir, ничем не пожатый. Dovecot туда сейчас не смотрит. Хочу сжать все это безобразие и почистить место на хранилище.

Aborigen1020 ()
Ответ на: комментарий от vel

нужно использовать

Не очень получается и таким образом. Это без скрипта, просто в консоли запускать если.

tar: /mnt/backup.../140345823862.M593324421P14791.mail,S=1530,W=1562\:2,: Функция stat завершилась с ошибкой: Нет такого файла или каталога

Но файл то есть.

-rwxrwxrwx    1 admin    users         1530 Sep 23  2018 /volume1/Backup/.../140345823862.M593324421P14791.mail,S=1530,W=1562:2,

Кажется, неправильно оборачиваются запятые в названии файла. Пока единственная зацепка

Aborigen1020 ()
Ответ на: нужно использовать от Aborigen1020

Пока единственная зацепка
/mnt/backup.../140345823862.M593324421P14791.mail,S=1530,W=1562\:2,
/volume1/Backup/.../140345823862.M593324421P14791.mail,S=1530,W=1562:2,

Ну хоть бы через diff прогнал бы, чтоле? Очков не надо, чтобы почувствовать разницу.

anonymous ()
Ответ на: комментарий от anonymous

Мда, куда лезешь то.
Тему прочитай, и пойми, что первое - это путь к файлу через cifs, а второе - локальный путь к этому же файлу на сетевой шаре.
Анонимус сегодня какой-то уставший.

Aborigen1020 ()
Ответ на: комментарий от anonymous

Да ну?:

ну да. Стат и не покажет путь, который не существует, volume1/backup не существует на моей машине, на которой делаю архивацию.

можете еще про слэш в пути пытаться объясниться, но именно так я получаю список файлов, этот слеш подставляется чем-то. Теперь невнимательно читаю рассуждения анонима об ошибках в пути

Aborigen1020 ()
Ответ на: комментарий от vel

А проблема только с этим файлом?

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

Aborigen1020 ()
Последнее исправление: Aborigen1020 (всего исправлений: 1)
Ответ на: комментарий от Aborigen1020

Дык взять все имя файла 1 раз в одинарные кавычки и не париться с экранированием отдельных символов.

stat '/mnt/backup.../140345823862.M593324421P14791.mail,S=1530,W=1562:2,'
stat '/volume1/Backup/.../140345823862.M593324421P14791.mail,S=1530,W=1562:2,'

vel ★★★★★ ()
Ответ на: комментарий от vel

OK.

stat '/mnt/backup/.../140345823862.M593324421P14791.mail,S=325386,W=331082:2,'
stat: не удалось выполнить stat для '/mnt/backup/.../140345823862.M593324421P14791.mail,S=325386,W=331082:2,': Нет такого файла или каталога 


ls -lah /mnt/backup/.../140345823862.M593324421P14791.mail*
ls: '/mnt/backup/.../140345823862.M593324421P14791.mail,S=325386,W=331082:2,': Нет такого файла или каталога
-rwxrwxrwx 1 1024 users 318K сен 24  2018 /mnt/backup/.../140345823862.M593324421P14791.mail,S=325386,W=331082:2,

stat '/volume1/Backup/.../140345823862.M593324421P14791.mail,S=325386,W=331082:2,'
  File: "/volume1/Backup/.../140345823862.M593324421P14791.mail,S=325386,W=331082:2,"
  Size: 325386    	Blocks: 640        IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 16777675    Links: 1    
Access: (0777/-rwxrwxrwx)  Uid: ( 1024/   admin)   Gid: (  100/   users)
Access: 2018-09-24 01:38:31.000000000
Modify: 2018-09-24 01:38:31.000000000
Change: 2019-10-24 11:02:02.000000000
Aborigen1020 ()

https://bugs.launchpad.net/ubuntu/ source/samba/ bug/676304

Ivan Kozik (ludios) wrote on 2017-09-26: #18
On xenial, I noticed that the Linux cifs client converts : to U+F022 (SFM_COLON) by default even when talking to a Samba with unix extensions. I think this happens in convert_to_sfm_char in linux's fs/cifs/cifs_unicode.c.

You can use the undocumented mount option «nomapposix» to turn off those character conversions, and then access to files with a colon works fine.

slowpony ★★★ ()
Ответ на: комментарий от Aborigen1020

ну что, cifs-шара умерла ночью, видимо, от таких io, и все встало ракомколом.
Теперь у меня есть частичный архив.
Думаю получить имя предпоследнего файла в архиве, и найдя эту строку в файле $log_file, удалив предыдущие строки, запустить архивацию с уже измененным списком. Сработает жеж добавление в уже существующий архив?

Aborigen1020 ()
Ответ на: комментарий от Aborigen1020

сделал обрезку файла до нужной строки

sed '1,460586d' /tmp/arch_name.log

Ну а так как добавить в уже сжатый архив новые файлы нельзя, создал архив с остатками нужных файлов рядом с другим именем.

Aborigen1020 ()