Корзина в линуксе. (фиксим сабж.)

Полезные советы и программы от пользователей нашего форума.

Модератор: Модераторы разделов

Аватара пользователя
demongloom
Сообщения: 454
Статус: Добрый Демон

Корзина в линуксе.

Сообщение demongloom »

Как известно, ос линукс не имеет функции "корзины" для файловых систем. А это значит, что любой удаленный файл в системе больше не подлежит восстановлению. Исключение составляют лишь файловые системы ext2, но уже в файловой системе ext3 файл уже невозможно восстановить. Графические оболочки как Гном или КДЕ имеют свою собственную реализацию корзины, однако на уровне консоли эта корзина не действует. Как же решить эту проблему? Ведь случайно или по ошибке удаленные файлы, в следствие своих действий или действий программы иногда приносят немало смертей нервным клеткам владельца удаленных файлов. Можно конечно повышать самодисциплину – внимательно обдумывать каждое свое действие при удалении файлов. Можно пытаться использовать примочки для команды/программы rm, заменяя ее на нечто похожее команде mv, но это лишь припарки - они мало эффективны и помогают на уровне команд в консоли и скриптов которые используют rm для удаления файлов. Увы, но если вы работаете в mc или используете программу которая во время работы удаляет файлы, то примочки к rm уже не помогут. Потому что на программном уровне идет не обращение к программе rm, а обращение к функции ядра – unlink, которая удаляет файл. Ниже речь пойдет о программе recycled4linux. Эта программа состоит из двух частей: программа которая работает с корзиной и модуль для ядра. Ее модуль для ядра заменяет функцию unlink и не удаляет файл, а переносит в корзину, откуда уже в дальнейшем его можно удалить. Есть поддержка пользователей, квот, и прочих опций для удаляемых файлов.

{
Примечание автора:
Программа еще в стадии разработки (статус Бета) и поэтому могут быть проблемы. Так что если вы решите установить эту программу на сервер занятый важной задачей, то пеняйте на себя. Соответственно возможны security holes и прочие неприятные вещи. Пишу не для того что бы напугать, а для того что бы не было бессмысленного флуда о том что чем меньше всякого в ядре – тем лучше. Я лишь описываю проблему и одно из ее решений. Для тестирования и для пользования можно ставить на десктопе.
}

Официальный сайт проекта - http://www.shirka.org/phpwebsite/pagemaste...sition~1:1.html


Теперь речь пойдет об сборке этой программы.
Для сборки рекомендую использовать cvs версию так как в ней например есть поддержка ядра 2.6.7 (появилась после моих баг репортов).

Итак откройте ваш любимый терминал и впишите:
1.cvs -d:pserver:anonymous@cvs.shirka.org:/var/cvsroot login
2.cvs -z3 -d:pserver:anonymous@cvs.shirka.org:/var/cvsroot checkout recycled
3.cd recycled
4.make -f Makefile.cvs
5../configure --enable-debug --enable-kdebug ( + опции )
6.make
7.make install

Выше указанными действиями вы скачаете последнюю версию R4L, соберете ее (с опциями для дебага), а также проинcталлируете.
Программа требует исходники ядра для сборки, так как она создает модуль для ядра.


R4L использует конфигурационный файл (/etc/recycled.conf) для настройки.
Давайте же глянем что в нем прописано.

[General]

# Name of recycled directory
{
Название папка для корзины.
Если у вас есть mount point то в каждом смонтированном разделе будет использоваться папка корзины.
!!! Также незабудьте создать папку для корзины, поскольку автоматически папка не создается !!!
# mkdir /.recycled
}
Recycled_Name = .recycled

# Apply default configuration for this users
{
Использовать стандартную конфигурацию для ниже указанных пользователей.
}
#Users = duclos, root

# or use this syntax for apply for all users
{
Можно также указать *All_Users* для применения параметров для всех пользователей.
}
Users = *All_Users*

# Protect dangerous root user
{
Защищать опасного суперпользователя.
}
Root_Protected = Yes

# Root don't protect these filesystem types
{
Не использовать корзину для ниже указанных файловых систем.
}
FS_Type_Exclude = proc, usbfs, usbdevfs, devfs, devpts, tmpfs

# mkdir UID dir in recycled directory
# example :
# mkdir /.recycled/501 for fist user (501 is uid of first user on Linux Mandrake)
# mkdir /.recycled/502 for second user (502 is uid of second user on Linux Mandrake)
# mkdir /.recycled/0 for root user (0 is uid of root user on all Linux)
{
Использовать номер пользователя для удаленных файлов.
}
Append_UID = Yes

# General Quota
{
Использовать квоты для корзины.
}
Quota = On
Quota_Limit = 10%
Quota_Alert = 80%

# Laps time between two calls INIT script
InitTime = 1800s
# Laps time between two calls scripts
LapsTime = 30s


#
# Default configuration for all users
#
[Default]
{
Директории обрабатываемые r4l.
}
# Includes directories for recycled
# example :
# Includes = /bin:/usr/bin (absolutes paths)
# Includes = ~/Prj:~/Documents (relatifs paths to home directory of user)
Includes = ~/
{
Директории необрабатываемые r4l.
}
# Excludes directories for recycled
# Idem with Includes
Excludes = ~/tmp

{
Активировать сервис корзины.
}
# Yes : recycled is active
# No : recycles is not active
Active = Yes

{
Перемещать ли в корзину файлы нулевой длины.
}
# Yes : save zero size files
# No : don't save zero size files
Zero_Size = No

{
Сохранять ли скрытые файлы.
}
# Yes : save dot files
# No : don't save dot files
Dot_File = No

{
Сохранять ли скрытые директории.
}
# Yes : save files in dot dir
# No : don't save files in dot dir
Dot_Dir = No

{
Сохранять ли файлы меньше определенного размера.
}
# Don't save file with him size < Min_Size
# A value 0, ignore
# Prefix Kk (value * 1024), Mm (value * 1024 * 1024), Gg(value * 1024 * 1024 * 1024)
Min_Size = 0

{
Сохранять ли файлы больше определенного размера.
}
# Don't save file with him size > Max_Size
# A value 0, ignore
# Prefix Kk (value * 1024), Mm (value * 1024 * 1024), Gg(value * 1024 * 1024 * 1024)
Max_Size = 0

{
Квоты корзины.
}
# Quota
Quota = On
Quota_Limit = 10%
Quota_Alert = 80%
Quota_AddAlert = -10%

# Laps time between two calls INIT script
InitTime = 1800s
# Laps time between two calls scripts
LapsTime = 30s

{
Путь к скриптам r4l.
}
# Notify scripts
Script_Alert = /etc/recycled/alert.sh
Script_Limit = /etc/recycled/limit.sh


После настроек конфигурации можно приступить к запуску сервиса.
После инсталляции r4l создает в init.rc свой сервис. Для red-hat (rh..fc) можно для запуска использовать команду service recycled start, а для остановки service recycled stop. Ну а после запуска можно проверить работу корзины.
Если жизнь твоя порвется, тебе новую сошьют.
Спасибо сказали:

Аватара пользователя
Jan2ary
Бывший модератор
Сообщения: 630
Статус: Тщедушный очкарик

Re: Корзина в линуксе.

Сообщение Jan2ary »

Пожалуйста, источник, автора, ссылку на страницу, откуда взята статья.
Не шалю, никого не трогаю, починяю примус...
Спасибо сказали:

Аватара пользователя
demongloom
Сообщения: 454
Статус: Добрый Демон

Re: Корзина в линуксе.

Сообщение demongloom »

Статью написал я. Первоисточник тут. Что уже и статьи не могу написать :) ? Просто после обсуждения vesa патча я понял что нужно писать в виде статьи, а не краткой заметкой.
Если жизнь твоя порвется, тебе новую сошьют.
Спасибо сказали:

Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Корзина в линуксе.

Сообщение t.t »

Во-первых, что, rm -i и иже с ним уже отменили? Али как? Ах да. я вспомнил, мы же повсеместно под рутом работаем... ^_^

А во-вторых, вот тут не понял (дальше, честно сказать, не читал):
(demongloom @ Saturday, 17 July 2004, 6:37) писал(а):любой удаленный файл в системе больше не подлежит восстановлению. Исключение составляют лишь файловые системы ext2, но уже в файловой системе ext3 файл уже невозможно восстановить.
3 от 2 только наличием журнала отличается. Это что, журнал не даёт файл восстановить?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:

Аватара пользователя
demongloom
Сообщения: 454
Статус: Добрый Демон

Re: Корзина в линуксе.

Сообщение demongloom »

Во-первых, что, rm -i и иже с ним уже отменили? Али как? Ах да. я вспомнил, мы же повсеместно под рутом работаем...

rm -i поможет программам?
а если пользователь по ошибке, даже с rm -i свой файл удалил, так что рут тут не причем?
3 от 2 только наличием журнала отличается. Это что, журнал не даёт файл восстановить?

Увы, но это так. В гугле поищите. Может и есть средства для ехт3, но есть ли средство для reiserfs?

------------------------------------------------------------------------------
Вопрос к "умникам-админам" или к "правильным админам". По вашему r4l тоже губить на корню, ибо это по мастдайски корзину иметь?
Если жизнь твоя порвется, тебе новую сошьют.
Спасибо сказали:

Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Корзина в линуксе.

Сообщение t.t »

(demongloom @ Monday, 19 July 2004, 23:53) писал(а):Вопрос к "умникам-админам" или к "правильным админам". По вашему r4l тоже губить на корню, ибо это по мастдайски корзину иметь?
Ну губить на корню -- это пожалуй слишком (как и остальные формулировки). Я имел ввиду всего лишь что не надо тащить в линукс виндовую идеологию. Вредно привыкать к тому, что не надо десять раз подумать прежде чем что-либо удалить.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:

Аватара пользователя
demongloom
Сообщения: 454
Статус: Добрый Демон

Re: Корзина в линуксе.

Сообщение demongloom »

Незнаю как вам, но помоему не все что есть в виндовсе должно быть предано огню. Есть очень хорошие вещи-идеи-реализации. Другое дело что кол-во плохих увы преобладает над кол-вом хороших.

Ну программы не думают, а делают. Да и всегда есть шанс что ошибешься. Или сейчас что-то удалил, а потом понадобилось.
Если жизнь твоя порвется, тебе новую сошьют.
Спасибо сказали:

Аватара пользователя
Vladislav
Сообщения: 383
ОС: Debian Sid

Re: Корзина в линуксе.

Сообщение Vladislav »

Да какая разница, идеологии, подходы, методы? Главное что-бы это что-то работало, либо это нечто кому-то было необходимо. Если необходима корзина, даже в том случае, когда она требуется только авторам - она имеет место быть. А использовать ее или нет - личное право каждого. Лично мне она не нужна, но при использовании Linux секретарем и пр. - она просто незаменима, я, к примеру, ежедневно вытягиваю горы документов из корзины Samba.
Спасибо сказали:

Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Корзина в линуксе.

Сообщение t.t »

(Vladislav @ Tuesday, 20 July 2004, 10:27) писал(а):Если необходима корзина, даже в том случае, когда она требуется только авторам - она имеет место быть.
Если из моих постов складывается мнение, что "баба яга против" -- то я извиняюсь, не имел этого ввиду.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:

Аватара пользователя
Vladislav
Сообщения: 383
ОС: Debian Sid

Re: Корзина в линуксе.

Сообщение Vladislav »

(t.t @ Tuesday, 20 July 2004, 12:42) писал(а):Если из моих постов складывается мнение, что "баба яга против" -- то я извиняюсь, не имел этого ввиду.

Да ни в коем случае! Программы, как и мнения, всякие нужны и всякие важны. Если они не перерастают во флейм и потрясанием кулаками. IMHO
P.S. Извиняюсь за флейм :)
Спасибо сказали:

agreed
Сообщения: 143
ОС: Fedora 10, Mac OS X 10.5

Re: Корзина в линуксе.

Сообщение agreed »

Гм... А я всегда не понимал корзину... :) Я привык к тому, что "удаление" файла - это освобождение места на жестком. А для наведения порядка существует "перемещение". Еще с начала девяностых приучен создавать архивы с особо важными данными. Хотя, что уж лукавить, корзина в win выручала несколько раз... когда я забывал ее очищать! :)
Спасибо сказали:

snake
Бывший модератор
Сообщения: 677

Re: Корзина в линуксе.

Сообщение snake »

(t.t @ Вторник, 20 Июля 2004, 9:38) писал(а):
(demongloom @ Monday, 19 July 2004, 23:53) писал(а):Вопрос к "умникам-админам" или к "правильным админам". По вашему r4l тоже губить на корню, ибо это по мастдайски корзину иметь?
Ну губить на корню -- это пожалуй слишком (как и остальные формулировки). Я имел ввиду всего лишь что не надо тащить в линукс виндовую идеологию. Вредно привыкать к тому, что не надо десять раз подумать прежде чем что-либо удалить.


В виндовсе такой корзины нет, если вы сказали del *.*, то это значит именно то что значит и безо всяких там! Так же unlink и в виндовом перле значит абсолютно то же самое, что и в юниксовом, я уже не говорю про соответствующие вызовы используемеу во всех других языках програмирования. Прямыми аналогами виндовой корзины являються соответствующие КДЕшные и Гномовские приблуды. :thumbsup:
Кстати, я и в винде почти всегда удалял мимо корзины... B)
В реальности все не так, как на самом деле...
JabberID: zmeyk@jabber.ru
Спасибо сказали:

Аватара пользователя
alv
Бывший модератор
Сообщения: 7268
Статус: Пенсионер в законе
ОС: Cintu

Re: Корзина в линуксе.

Сообщение alv »

(snake @ Четверг, 17 Марта 2005, 13:33) писал(а):В виндовсе такой корзины нет, если вы сказали del *.*, то это значит именно то что значит и безо всяких там!


Совершенно верно. Удаление в корзину значит только то, что файл не удаляется (или удаляется не сразу, а еще какое-то время хранится где-то, занимая дисковое пространство). А удаление просто - это то, что занимаемое файлом дисковое пространство тем или иным способом (обнулением счетчика хардлинков, или как там в FAT) помечается как доступное для записи. Другое дело, что сами данные файла все равно некоторое время еще существуют (пока не будет перезаписано соответствующее место на диске) и теоретически их каким-то образом можно попытаться восстановить. Но для файловой системы их уже нет (а Корзина - это часть файловой системы!).

И вообще корзина (ИМХО) изобретение вредное, культвирующее раздолбайство. И в критических по настоящему ситуациях не спасающее: если уж хватило ума удалить очень нужный файл, достанет и очистить корзину после этого. Я где-то тут рассказывал страшную историю про дам из очень серьезной международной комиссии, которые полагали Корзину (для бумаг:-))) штатным местом хранения своих документов. Последствия были весьма печальные...

Как вариант страховки от случайного удаления можно предложить такое: дополнительные хардлинки на важные файлы (и мест, в отличие от корзины, практически не занимает). Есть, конечно, ограничения, но для особо рассеянных - лучше, чем ничего.
Спасибо сказали:

Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Корзина в линуксе.

Сообщение t.t »

(snake @ Четверг, 17 Марта 2005, 13:33) писал(а):В виндовсе такой корзины нет, если вы сказали del *.*, то это значит именно то что значит и безо всяких там! Так же unlink и в виндовом перле значит абсолютно то же самое, что и в юниксовом, я уже не говорю про соответствующие вызовы используемеу во всех других языках програмирования. Прямыми аналогами виндовой корзины являються соответствующие КДЕшные и Гномовские приблуды.
Кстати, я и в винде почти всегда удалял мимо корзины...
Ну, честно сказать, я, видимо, не совсем правильно понял, что из себя этот r4l представляет; да и виндовой корзиной уже не помню когда последний раз пользовался.
(alv @ Четверг, 17 Марта 2005, 13:55) писал(а):Как вариант страховки от случайного удаления можно предложить такое: дополнительные хардлинки на важные файлы (и мест, в отличие от корзины, практически не занимает). Есть, конечно, ограничения, но для особо рассеянных - лучше, чем ничего.
Тоже, кстати, да. И автоматизируется легко, и никаких новых велосипедов изобретать не надо, и, как уже сказано, экономичнее. А ограничение я вижу только одно -- не хранится изначальное расположение файла. Ну да при разумном именовании это совсем не критично.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:

Аватара пользователя
alv
Бывший модератор
Сообщения: 7268
Статус: Пенсионер в законе
ОС: Cintu

Re: Корзина в линуксе.

Сообщение alv »

(t.t @ Четверг, 17 Марта 2005, 15:01) писал(а):А ограничение я вижу только одно -- не хранится изначальное расположение файла. Ну да при разумном именовании это совсем не критично.


И еще одно - на отдельный раздел не положишь:-))
Спасибо сказали:

Аватара пользователя
Lemurian
Сообщения: 87
ОС: Zenwalk Linux 2.6

Re: Корзина в линуксе.

Сообщение Lemurian »

не понимаю зачем она нужна (но это уже ИМХО)

Тем кому она так необходима: как нащот написать сценарий, кот. будет перемещать файлы куда-то (можно фиксировать и откуда) и восстанавливать соотв. образом и пользовать его вместо rm?
XFCE 4.3.90, KDE 3.5.1
Спасибо сказали:

Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Корзина в линуксе.

Сообщение elide »

Для Lemurian:
ты вообще читал, что в этой теме написано????
Можно пытаться использовать примочки для команды/программы rm, заменяя ее на нечто похожее команде mv [skip] Увы, но если вы работаете в mc или используете программу которая во время работы удаляет файлы, то примочки к rm уже не помогут. Потому что на программном уровне идет не обращение к программе rm, а обращение к функции ядра – unlink, которая удаляет файл.
слава роботам!
Спасибо сказали:

Аватара пользователя
Lemurian
Сообщения: 87
ОС: Zenwalk Linux 2.6

Re: Корзина в линуксе.

Сообщение Lemurian »

Для elide:
читал, но получается что выборочно (этого не видел)
XFCE 4.3.90, KDE 3.5.1
Спасибо сказали:

Archont
Сообщения: 76

Re: Корзина в линуксе.

Сообщение Archont »

Господа, если не сложно, подскажите, как из корзины удалять содержимое/удалять выборочно?
Второй вопрос: как восстанавливать удаленные файлы?
В настоящий момент очищаю корзину вручную (удаляю всё из /.recycled), но при этом она перестает работать.
Третий вопрос: как её настроить таким образом, чтобы в неё попадали только удаленные файлы, а не все измененные файлы? За два дня и 4 перезагрузки в /.recycled/0/var/log собралось 8,5 М и 39 файлов (работает logrotate), в /.recycled/0/etc/cups/certs скопилось 124 файла и т.п.
Или ну уё в пень? И лучше работать поаккуратнее, а в случае чего просто постараться восстановить потери при помощи debugfs?
Спасибо сказали: