Backup set что за папки можно ли их удалить
Перейти к содержимому

Backup set что за папки можно ли их удалить

Необычное переполнение жесткого диска или как удалить миллионы файлов из одной папки

Скорей всего, матерым системным администраторам статья будет не очень интересна. В первую очередь она ориентирована на новичков, а также на людей, которые столкнулись с подобной проблемой — необходимостью удалить огромное количество файлов из одной папки в ОС Linux (Debian в моем случае), а также с закончившимся местом на диске, когда df -h выдает что почти 30% свободно.

Начало

Ничто не предвещало беды.
Сервер с сайтом работал без никаких проблем уже больше года (uptime почти 500 дней), не было никаких проблем, и я с чистой душой спокойно ушел в отпуск.

В первый же день отпуска мне звонят с жалобой — сайт недоступен. MySQL падает с ошибкой Error 28 «No space left on device».

Казалось бы, проблема банальна — кончилось место на диске. Правда, df -h показывает, что на диске имеется вполне достаточное количество свободного места, ну да я же в отпуске, разбираться лень — посоветовал им поискать на диске ненужные файлы (старые бекапы и т.д.) и их удалить. Удалили, вроде все заработало.

Прошла пара часов и проблема вернулась. Странно — свободное место на жестком диске за это время практически не уменьшилось. После беглого гугления обнаружился топик на serverfault, в котором говорится, что проблема может возникнуть также из-за того, что кончилось не место на диске, а айноды!

Ввожу в консоль df -i — и оказывается действительно, айноды у меня закончились.

Проблема

Начал искать, где же у меня находится столько файлов на жестком диске, что они сожрали все айноды (а айнодов у меня на 500-гигабайтном жестком диске больше 30 миллионов).

И нашел — оказалось, проблема была в папке с сессиями php.

Видимо, по какой-то причине сломался механизм автоочистки этой папки, что привело к тому, что в ней скопилось огромное количество файлов. Насколько огромное — сказать сложно, потому что никакие стандартные команды линукс, такие, как ls, find, rm и т.д. — с этой папкой не работают. Просто виснут, заодно подвешивая весь сервер. Могу только сказать, что сам файл директории стал весит около гигабайта, а также что файлов там точно более полумиллиона, потому что столько я оттуда уже удалил.

Решение

Решение очевидное — надо удалить все эти файлы сессий. При этом желательно, чтобы сервер продолжал работать в штатном режиме. Для начала я переименовал папку сессий, в которой лежит куча файлов, а вместо нее создал пустую — чтобы спокойно из старой (переименованной) удалять все файлы, и чтобы это не мешало созданию новых файлов сессий.

Также в крон добавил автоматическое удаление файлов сессий старше одного часа, чтобы проблема больше не повторилась.

И перешел к основной проблеме — очистке жесткого диска.

Попробовал решение «в лоб»:

rm -rf ./*

Сервер повис, ничего не удалилось

Попробовал известный способ для удаления большого числа файлов

find . -type f -exec rm -v <> \;

Ничего, сервер виснет, файлы не удаляются.

А теперь что самое интересное — файловый менеджер mc достаточно успешно справлялся с задачей удаления этих файлов! То есть, когда запускаешь удаление папки — файлы удаляются, mc не виснет. Удаление идет со скоростью примерно 5 000 файлов в минуту, правда при этом создается огромная нагрузка на жесткий диск, что приводит к неработоспособности сервера.

А хотелось бы, чтобы эти файлы постепенно удалялись в фоновом режиме, и не мешали нормальной работе сайта.

Собственно, решение опять нашлось в гугле — Olark делится способом, как он отобразил список из 8 миллионов файлов в 1 папке, используя системный вызов getdents

Здесь находится документация по функции getdents, а также пример кода, который ее использует.

Правда, этот пример мне не совсем подошел — даже если ставить большой размер буфера, как советует Olark в своем блоге, все равно сервер виснет при попытке прочитать всю папку разом.

Опытным путем подобрал размер буфера в 30 килобайт, который позволяет считать около 550 названий файлов из директории, при этом не подвешивая сервер и не создавая излишней нагрузки на диск. А также немного переписал код примера, чтобы вместо отображения имени файла он его удалял.

В итоге у меня получился такой код:

#define _GNU_SOURCE #include /* Defines DT_* constants */ #include #include #include #include #include #include #define handle_error(msg) \ do < perror(msg); exit(EXIT_FAILURE); >while (0) struct linux_dirent < long d_ino; off_t d_off; unsigned short d_reclen; char d_name[]; >; #define BUF_SIZE 1024*30 int main(int argc, char *argv[]) < int fd, nread; char buf[BUF_SIZE]; struct linux_dirent *d; int bpos; int deleted; char d_type; char temp[100]; fd = open(argc >1 ? argv[1] : ".", O_RDONLY | O_DIRECTORY); if (fd == -1) handle_error("open"); deleted = 0; nread = syscall(SYS_getdents, fd, buf, BUF_SIZE); if (nread == -1) handle_error("getdents"); if (nread != 0) < for (bpos = 0; bpos < nread;) < d = (struct linux_dirent *) (buf + bpos); d_type = *(buf + bpos + d->d_reclen - 1); if(d->d_ino && d->d_ino != 22332748 && d->d_ino != 22332761) < // тут я прописал inode самой директории и директории верхнего уровня, чтобы он не пытался удалять файлы "." и ".." - принимаю подсказки, как это сделать лучше sprintf(temp,"%s/%s", argv[1], (char *) d->d_name); remove(temp); deleted += 1; > bpos += d->d_reclen; > > printf("deleted %d\n", deleted); exit(EXIT_SUCCESS); > 

Код компиллируется обычным gcc

gcc listdir.c -o listdir

И просто запускается из командной строки:

./listdir mod-tmp2

Получившийся файл я поставил в крон и теперь у меня удаляется по 547 файлов в минуту, при этом нагрузка на сервер в пределах нормы — и я надеюсь, в течение недели-другой все файлы все-таки удалятся.

Выводы
  1. Если df -h показывает, что на жестком диске еще есть место — его может и не быть. Надо смотреть также df -i
  2. Не стоит надеяться на механизмы авто-очистки таких вещей, как файлы сессий — в какой-то момент они могут не сработать, и вы окажетесь у целой горы файлов, удалить которые — задача нетривиальная
  3. Стандартные команды линукс, такие как ls, rm, find и т.д. могут пасовать перед нестандартными ситуациями вроде миллионов файлов в одной папке. В таком случае надо использовать низкоуровневые системные вызовы

Можно ли удалять папки backup set?

В этой папке находятся резервные копии имхо back-up, точки отката, нужны они только для того если что-то случится с системой и вы по ним можете восстановиться, а так ответ на вопрос — да можно удалять.

Ответы

Можно но желательно иметь хоть одну точку возврата(в настройках гдето выставлялось) а-то всякое бывает — я сам часто копаюсь в компе так еслиб небыло бакапа переустанавливал-бы винду

Похожие вопросы

спасибо что напомнил 🙂

Backup — это значит создание резервной копии.
Backup original files — значит, сохранение ИСХОДНОГО файла, который, вероятно, был изменён во время работы.

удавалось нормально и без Backup Windows 7
удалите и не устанавливайте KB2859537 апдейт.

У меня это делает Acronis True Image

http://nnm.me/blogs/nucatkluca2010/acronis-true-image-18-0-build-6055-repack-eng-rus/
Настраивается всё что угодно, папки, проги, разделы, отдельные файлы, расписание.
Работает быстро и надёжно.

Перепробовал кучу аналогичных продуктов — всё не так надёжно.

Смотря «против» чего бэкап, чем ты его будешь делать и что там с объёмами жёсткого.
Ну вообще, бекапить образ диска на тот же диск как-то не очень, сам подумай.

Backup set что за папки можно ли их удалить

5 set 2013, ore 13:52

Не могу удалить папку «Backup» с содержимым в ней, помогите пожалуйста кто знает как с этим бороться.

Такая проблема! Захотел переустановить систему (Windows 7 ultimate x64), ну и чтобы не потерять все игры решил сделать резервную копию всех игр (а у меня их 18 штук), нажал Steam->Резервное копирование и восстановление игр. ->Создать резервные копии программ; высветилось окно со списком моих игр с возможностью поставить галочку на против тех игр для которых мне нужны резервные копии — Я выделил все 18 игр (160 Гб), нажал «Далее». В следующем окне высветилась «сноска» где можно выбрать: CD 650 Мб; DVD 4,5 Гб и «Указать размер». Я выбрал конечно же «Указать размер» и поставил значение 160700 Мб, нажал «Далее». Начался процесс создания резервной копии, дойдя до значения 87300 вдруг высветилась ошибка «Ошибка процесса создания резервной копии» (а вот ещё чё самое главное наверное, все 18 названий игр стали названием имени резервного файла и это название стало очень большой длины и система его просит переименовать, но сделать это невозможно потому что при нажатии хоть левой хоть правой кнопки мыши на этот файл а он кстати в виде папки, ничего не происходит, даже не выделяется, пробовал выделив папку Backup нажать Shift+Delete и затем Enter пишет что система не поддерживает файлы с таким длинным именем попробуйте переименовать файл, а переименовать его никак даже функции такой нет) и самое обидное что место зарезервированное 160 гигов так и не освободилось. Помогите пожалуйста кто знает что делать, может программы какие могут помочь если Вы знаете какие нибудь. Как удалить эту папку (Backup) и вернуть 160 Гб зарезервированного под эти копии место?
P.S. Заранее Большое Спасибо ! ! !

Visualizzazione di 1 — 8 commenti su 8

Backup set что за папки можно ли их удалить

Проблема с запуском в Windows

Бренд Norton является составляющей NortonLifeLock Inc. © NortonLifeLock Inc., 2023 г. Все права защищены. NortonLifeLock, логотип NortonLifeLock, логотип с галочкой, Norton, LifeLock и логотип LockMan являются товарными знаками или зарегистрированными товарными знаками компании NortonLifeLock Inc. или ее дочерних компаний в США и других странах. Firefox является товарным знаком Mozilla Foundation. Android, Google Chrome, Google Play и логотип Google Play являются товарными знаками Google, LLC. Mac, iPhone, iPad, Apple и логотип Apple являются товарными знаками Apple Inc., зарегистрированными в США и других странах. App Store является знаком обслуживания Apple Inc. Alexa, и все связанные с ним логотипы являются торговыми марками компании Amazon.com, Inc. или ее дочерних компаний. Microsoft и логотип Windows являются зарегистрированными товарными знаками компании Microsoft Corporation в США и других странах. Изображение робота Android Robot заимствовано или модифицировано на основе общедоступных материалов, созданных в Google, и используется согласно условиям лицензии Creative Commons 3.0 Attribution License. Другие наименования являются товарными знаками соответствующих владельцев.

  • Продукты
  • Norton Antivirus Plus
  • Norton 360 Standard
  • Norton 360 Deluxe
  • Norton 360 Premium
  • Norton 360 for Gamers
  • Norton Mobile Security for Android
  • Norton Mobile Security for iOS
  • Компоненты продуктов
  • Антивирус
  • Удаление вирусов
  • Защита от вредоносного кода
  • Резервное копирование в облаке
  • Safe Web
  • Safe Search
  • Password Manager
  • Услуги и поддержка
  • Служба поддержки Norton
  • Центр обновления Norton
  • Как продлить подписку
  • О компании
  • Подробнее о Norton
  • Вход в систему
  • NortonLifeLock

© 2023 NortonLifeLock Inc. Все права защищены.

Глобальная поддержка

Выберите язык в списке

Американский континент
  • Português (do Brasil)
  • English
  • Canada Français
  • Español (LAM)
Ближний Восток и Африка
Европа
Азиатско-Тихоокеанский регион
  • 简体中文
  • 繁體中文 (台灣)
  • 繁體中文 (香港)
  • English (Hong Kong S.A.R.)
  • 日本語
  • 한국어
  • English (Asia Pacific)
  • English (Australia)
  • English (New Zealand)
  • English (India)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *