Удалить поврежденные файлы linux

Обновлено: 08.07.2024

В этой статье я расскажу, каким образом можно раз и навсегда удалить файлы с жёсткого диска в ОС Ubuntu. Итак, знакомьтесь — команда shred.

Не все знают, что удаляя файл посредством rm или через файловый менеджер, сам файл не удаляется, а затирается лишь его индекс и пространство, которое занимал файл, записывается системой как свободное для записи. Файл, как вы уже поняли, так и остался на своём месте и восстановить его оттуда не составит большого труда. Он пролежит там до тех пор, пока на его место вы не запишите другую информацию.

Shred случайными числами заполняет место, занятое файлом. И уже, даже восстановив ваш удалённый файл, его будет невозможно прочитать. По умолчанию shred не удаляет файл, для этого используется параметр --remove (-u).

shred -u /path/to/file

В shred заложен 25-тикратный цикл, то есть программа перезапишет файл случайным содержимым 25 раз. Чтобы изменить это значение, например на 35-тикратный:

shred -u -n 35 /path/to/file


Если ваша паранойя достигла ещё бОльшего уровня, то вам подойдут следующие советы.

Чтобы спрятать информацию о том, что вы зачищали файл, используйте параметр -z, добавляющий нули в конец файла — это сделает файл непохожим на зашифрованный. Если вам интересно наблюдать за процессом перезаписи, параметр -v (verbose) служит для подробного вывода информации прогресса.

shred -u -z /path/to/file

Если хотите удалить сразу несколько файлов, то укажите их в таком формате:

shred -u -z -n 30 /path/to/file1 /path/to/file2 /path/to/file3
или же можно использовать маску:
shred -u -z -n *.txt

Shred также может удалить содержимое всего жёсткого диска командой
shred /dev/sda

Естественно, время выполнения операций напрямую зависит от размера файла и скорости записи.

Единственным минусом я обнаружил то, что shred не умеет удалять каталоги. В этом нам на помощь приходит утилита wipe:
wipe -rf /path/to/catalog

Для более подробной информации используйте man shred и man wipe.


Если вы уже удалили файлы, и не хотите восстанавливать их и потом «правильно» удалять, ввиду их большого размера, то остаётся одно — перезаписать другой информацией. Информацией, ничего в себе не несущей. В этом вам придёт на помощь утилита dd

В данной статье рассматриваются средства восстановления данных в случаях:

  1. повреждения (отказа) оборудования (физического повреждения носителей информации);
  2. искажения структуры хранения данных (удаление/повреждение таблицы дисковых разделов или самих дисковых разделов, форматирование дисковых разделов);
  3. удаления данных (удаление файлов или каталогов);

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

  • Никакие инструменты не могут гарантировать восстановление, и лучший способ восстановления данных - это восстановление их из своевременно и правильно сделанной резервной копии.
    • Политика резервного копирования и восстановления должна быть обязательной частью общей политики информатизации;
    • Резервные копии должны не просто делаться, но и регулярно проверяться на возможность восстановления данных из них;
    • Для контроля состояния накопителей данных и прогнозирования их отказов следует использовать средства мониторинга: Мониторинг параметров S.M.A.R.T;

    Данная статья применима к:

      Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7)

    Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)

    Astra Linux Special Edition РУСБ.10015-16 исп. 1

    Astra Linux Common Edition 2.12

    Инструмент GNU ddrescue (не путать с инструментом dd_rescue) копирует данные из одного (повреждённого) источника в другой, предпринимая максимально возможные усилия для максимально возможного извлечения данных.

    Инструмент GNU ddrescue входит в репозиторий Astra Linux Common Edition 2.12 и может быть установлен командой:

    В Astra Linux Special Edition инструмент может быть установлен из репозитория Astra Linux Common Edition.

    Общий синтаксис вызова:

    sudo ddrescue [<параметры>] <источник_данных> <приёмник_данных> [<карта>]

    После вызова инструмент сначала пытается скопировать данные из указанного источника в указанный приёмник пропуская "сбойные данные". При этом чтение осуществляется в прямом и обратном направлении постепенно уменьшающимися блоками, а результаты копирования запоминаются в "карте" (журнале хода копирования). После завершения копирования легкодоступных данных информация, сохранённая в "карте", используется для попыток копирования пропущенных "сбойных" участков. При этом наличие "карты" позволяет в произвольные моменты времени останавливать и возобновлять операцию копирования, не выполняя чтение ранее скопированных участков. Таким образом, возможное нарастание повреждений носителя в процессе работы не повлияет на уже прочитанные данные.

    1. В начале работы всему источнику назначается статус "не проверенный" (non-tried). Далее на всех этапах заполняется "карта" блоков с регистрацией изменения их статуса;

    Параметр "карта" является необязательным, но именно его применение делает инструмент действительно эффективным.

    В качестве источника и приёмника могут быть использованы любые блочные устройства в любых сочетаниях: накопители (например, /dev/sdb), дисковые разделы (/dev/sdb1), файлы.

    В параметрах вызова команды могут быть указаны (подробнее см. man ddrescue):

    • -r N - количество повторных попыток чтения повреждённых блоков;
    • -i NNN - начало зоны чтения;
    • -d - прямое чтение без использования буферов ядра;
    • -f - разрешение переписывать данные в приёмнике (используется для записи в приёмники, являющиеся устройствами).
    • -n - быстрое чтение без фазы "выцарапывания" данных;
    • -A - пометить все сбойные области как непрочитанные. Применяется для восстановления после потери источника и его последующего подключения.

    Пример 1. Быстро копируем доступные данные с дискового накопителя /dev/sdh в файл-образ file.tmp используя карту map.tmp:

    GNU ddrescue 1.21
    Press Ctrl-C to interrupt
    ipos: 120034 MB, non-trimmed: 0 B, current rate: 24576 B/s
    opos: 120034 MB, non-scraped: 0 B, average rate: 23968 kB/s
    non-tried: 0 B, bad-sector: 0 B, error rate: 0 B/s
    rescued: 120034 MB, bad areas: 0, run time: 1h 23m 27s
    pct rescued: 100.00%, read errors: 0, remaining time: n/a
    time since last successful read: n/a
    Finished

    Пример 2. В приведённом выше примере использован исправный диск, ошибок нет. При возникновении ошибок чтения - повторно копируем данные с накопителя, извлекая данные из повреждённых частей. Используются карта и файл образа, созданные при первой попытке копирования, извлечённые данные добавляются в образ, выполняются 3 попытки повторного чтения повреждённых данных, и используется прямой доступ к данным (-d):

    Полученный таким способом образ диска можно использовать следующим способом:

    • Перед дальнейшими манипуляциями создать резервную копию образа в ещё одном файле;
    • Исследовать образ с помощью описанного ниже инструмента testdisk - попробовать восстановить испорченную структуру дисковых разделов и файловых систем;

    • partx и kpartx (соответственно пакеты partx и kpartx);
    • losetup (пакет klibc-utils);
    • mount - эта команда позволяет монтировать дисковый раздел, находящийся внутри образа диска, если указать смещение этого раздела от начала образа (см. соответствующую документацию).

    Копировать весь диск не обязательно, можно копировать отдельные дисковые разделы или даже только важные файлы (если они доступны, на повреждённом диске разделы и файлы могут не определяться).

    Пример 3. Копирование отдельно дискового раздела /dev/sdb1 в новый дисковый раздел /dev/sdc1 (новый раздел должен быть создан заранее и иметь достаточный для размещения копируемых данных размер). Команды отличаются от команд в предыдущем примере только названиями источника и приёмника:

    sudo ddrescue -f /dev/sdb1 /dev/sdc1 partmap.tmp
    sudo ddrescue -f -r3 /dev/sdb1 /dev/sdc1 partmap.tmp

    Пример 4. Перезапуск копирования после отказа и восстановления диска-источника (например, диск-источник перестал отвечать, но удалось заставить его работать после переподключения).

    Можно указать смещение, с которого нужно продолжить копирование (для этого использовать информацию о выполненном копировании, полученную в предыдущей попытке копирования):

    sudo ddrescue -f -r3 -i 1234567000 /dev/sdb /dev/sdc map.tmp

    Можно продолжить копирование в обратном порядке:

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

    Пример 5. Отказы носителей-приёмников. Если копирование прервано из-за отказа со стороны диска-приёмника (/dev/sdc), можно скопировать содержимое неисправного приёмника на третий диск (/dev/sdd) и продолжить копирование из источника:


    Как профессиональному пользователю Linux, мне приходится устанавливать, тестировать и удалять тонны пакетов на своих системах Ubuntu, Fedora и Arch.

    Установка и удаление пакетов просты, но если вы столкнетесь с проблемой битых пакетов на вашей машине Ubuntu, это приведет к хаосу. Если вы не можете удалить битые пакеты с вашей машины Ubuntu, вы, вероятно, столкнетесь с проблемами при их последующей установке. Кроме того, битые пакеты занимают некоторое место в файловой системе Ubuntu.

    Удаление битых пакетов в Ubuntu Linux

    В Ubuntu проблема битых пакетов может возникнуть из-за ошибки зависимости, ошибки репозитория, блокировки файловой системы или других проблем. Иногда вам может потребоваться выполнить команды от имени пользователя root, чтобы удалить поврежденные пакеты из системы Ubuntu.

    Обычно пакеты устанавливаются внутри корневой файловой системы; когда у вас есть полномочия root, и вы делаете какие-либо несоответствия с любым из тех файлов или каталогов, где установлен пакет, он может оказаться битым.

    1. Очистка конкретного пакета в Ubuntu

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

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

    Теперь выполните команду auto clean, чтобы освободить место на диске, а затем обновите системный репозиторий.

    Вы также можете использовать команду move, чтобы переместить файлы кэша вашего приложения во временные файлы. Затем вы можете удалить поврежденный пакет через инструмент менеджера пакетов Debian (dpkg). Например, следующие команды удалят сломанный менеджер версий Ruby (RVM) в системе Ubuntu.

    2. Решение проблемы блокировки

    Иногда, после установки пакета в дистрибутивах Ubuntu или Debian, пакет сохраняет некоторые данные в файловой системе в виде архива. Поэтому, когда вы пытаетесь удалить этот файл, вы получаете ошибку, говорящую, что файл используется другим инструментом или другой программой.

    Обычно, когда вы удаляете инструмент с машины, файлы зависимостей и другие плагины тоже должны быть удалены. Но что делать, если некоторые пакеты не хотят покидать ваш компьютер! Пожалуйста, удалите заблокированные файлы пакетов Debian, выполнив следующие команды remove с правами root.

    3. Принудительное удаление поврежденных пакетов

    Этот метод поможет вам принудительно удалить неработающие пакеты в системе Ubuntu. Принудительное удаление требуется потому, что при установке некоторых пакетов в систему они устанавливаются в корневой каталог. Однако вы можете выполнить следующую команду dpkg, приведенную ниже, чтобы удалить все неработающие пакеты из вашей системы. Пожалуйста, не забудьте заменить <packagename> на имя вашего поврежденного пакета.

    Вы также можете создать список удаляемых пакетов в вашей системе Ubuntu, выполнив следующую команду GREP в оболочке терминала. Затем удалите их, выполнив следующую команду dpkg.

    Вот еще одна вещь, которая может вам понадобиться: после удаления неработающего пакета в системе Ubuntu, пожалуйста, выполните команды aptitude для обновления системного репозитория.

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

    4. Автоматическая очистка поврежденных пакетов в Ubuntu

    Команды auto clean и auto-remove на самом деле не удаляют поврежденные пакеты из системы. Тем не менее они помогают освободить место, которое занимало ранее установленное/удаленное приложение.

    Часто разработчики создают приложение таким образом, что файлы приложения остаются в файловой системе даже после удаления приложения из системы. В некотором роде, они действительно полезны при повторной установке того же приложения тем же методом.

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

    Теперь выполните следующую команду auto-remove с правами root, чтобы удалить ненужные приложения и данные зависимостей.

    После очистки системы выполните команду обновления репозитория для бесперебойной работы вашего ПК.

    5. Восстановление поврежденных пакетов через режим восстановления

    В этом методе мы покажем самый неиспользуемый способ удаления поврежденного пакета в системе Ubuntu. Мы будем использовать режим восстановления Ubuntu для восстановления поврежденных пакетов. Итак, технически этот метод не направляет вас на удаление поврежденных приложений, но он выполняет некоторые задачи, которые также восстанавливают поврежденные приложения. Когда инструмент dpkg не может восстановить пакет, вы можете удалить его из системы.

    Сначала запустите систему Ubuntu и нажмите клавишу Shift, чтобы войти в режим восстановления. Если клавиша Shift у вас не работает, вам может понадобиться найти комбинацию кнопок восстановления для вашей модели ПК/ноутбука, выполнив быстрый поиск в Google.

    Теперь вам нужно нажать кнопку Yes для монтирования вашей системы внутри файловой системы. Это перемонтирует файловую систему в режиме чтения/записи, а другие файловые системы будут смонтированы в каталоге /etc/fstab.

    repair-brpken-packages-from-recovery-mode-on-ubuntu

    build-cache-and-load-files

    6. Исправление сломанного системного пакета

    Обычно на машине Ubuntu мы используем приложение Software Updater для обновления репозитория, файлов кэша и других данных пакета. Но иногда, из-за ошибки зависимости или системной ошибки, вы не можете запустить приложение Software Updater.

    7. Получение менеджера пакетов Synaptic

    Менеджер пакетов Synaptic является наиболее используемым инструментом управления пакетами на основе графического интерфейса для Ubuntu и других дистрибутивов Debina. В нем есть функции для установки, удаления, обновления и исправления неработающих пакетов. Если на вашей машине не установлен инструмент Synaptic, выполните следующие команды в терминале с правами root для его установки.

    fix-broken-packages-on-ubuntu-via-synptic

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

    Дополнительные советы: Режим восстановления для удаления поврежденного пакета

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

    other-software-repo

    После удаления любого репозитория выполните команду aptitude update, чтобы обновить систему.

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

    Заключительные слова

    Все вышеупомянутые методы полезны для тех, кто одновременно борется с проблемами как одного, так и нескольких битых пакетов в своей системе Ubuntu. Иногда поврежденные системы вызывают ошибки, которые требуют исправления без переустановки всей системы. В этом посте я описал несколько методов удаления поврежденных пакетов в системе Ubuntu.

    Я надеюсь, что эта статья была информативной для вас; пожалуйста, поделитесь этой статьей со своими друзьями и сообществом Linux. Вы также можете написать свое мнение в разделе комментариев к этому посту.

    Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

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

    В качестве shell-оболочки рассмотрим bash, как самую используемую. А в качестве операции над файлами рассмотрим удаление, как самую деструктивную.

    Ситуации могут быть разными. В текущей директории могут быть файлы, которые нужно удалить вместе с теми, которые нужно оставить. Имена у них могут быть самыми разными. Причем первые от последних могут отличаться только одним каким-нибудь заковыристым символом.

    В названии файла есть служебный символ bash

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


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

    С полным списком служебных символов и механизмом экранирования в bash можно ознакомиться в man bash. Раздел QUOTING.

    Имя файла начинается с дефиса

    Удалить файл, начинающийся с дефиса простым экранированием не получится, и команда rm будет воспринимать дефис, как начало своего аргумента. Решить проблему довольно просто:

    Удаляем по wildcard

    Если удаление файлов попадает под wildcard-маску, то можно удалить всю группу файлов:

    Файлы с управляющим символом в названии

    В названии файла может встречаться управляющий ASCII-символ, такой как перевод строки (\n), табуляция (\t), backspace (\b). Это символы с ASCII-кодами менее 0x20, а также символы DELETE и ESC. Для удаления таких файлов подходит конструкция:


    Другим способом удаления таких файлов являяется ввод управляющего символа с клавиатуры. Для этого нужно воспользоваться комбинацией клавиш, которая экранирует следующий введенный символ, тем самым запрещая системе обрабатывать его. Как правило, эта комбинация CTRL+V. Точно убедиться в этом можно с помощью команды stty -a, посмотрев на параметр lnext. Удалим файл, содержащий символ ESC:

    Удаление файлов с символами utf8

    Если имя файла содержит символ в кодировке utf8, который мы не можем набрать на клавиатуре, то удалить такой файл можно выделением его мышкой, копированием в буфер обмена и последующей вставкой на ввод команды rm. Главное условие состоит в том, что наш терминал должен работать в кодировке utf8. Кодировка выставляется в настройках терминала. Будь то xterm, putty или брутальный linux tty.

    Перекодировка имени файла

    Подозревая, что имя файла находится в кодировке, отличной от кодировки терминала, мы можем выполнить перекодирование всех файлов в текущей директории. В результате файлы с битой кодировкой будут перекодированы, а файлы с ascii-символами изменений не претерпят. Существенный плюс этого способа – приведение всех файлов в читабельный вид.


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

    Также можно воспользоваться сторонними программами, которые попытаются распознать кодировку автоматически. Например, онлайн-декодер Лебедева.

    Если вы встретили такие символы в примонтированном media-носителе или смонтированном разделе Windows, не спешите ничего перекодировать. Возможно, вы просто указали неправильные опции монтирования.

    Автокомплит

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

    Удаляем файл через меню выбора

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

    Удаление по номеру inode

    Удалить файл можно по его номеру inode. Номер inode уникально идентифицирует файл в файловой системе. Узнать номер inode можно с помощью команды ls, а удалить – с помощью find. Недостаток этого способа, такой же, как у предыдущего. Неудобно, в случае большого числа файлов.

    Удаление по hex-коду

    И нельзя не упомянуть один суровый метод. Удаление по hex-кодам. Суть такова: мы узнаем hex-коды всех байтов в имени файла, а затем удаляем файл, указывая вместо имени hex-коды.

    Файловые системы отвечают за организацию хранения и восстановления данных. Так или иначе, со временем файловая система может быть повреждена, и некоторые её части могут оказаться недоступными. Если ваша файловая система обнаруживает такую несогласованность, рекомендуется проверить её целостность.

    Это можно сделать с помощью системной утилиты fsck (проверка целостности файловой системы). Эта проверка может выполняться автоматически во время загрузки или запускаться вручную.

    Когда использовать fsck в Linux

    Есть разные сценарии, когда вы захотите запустить fsck. Вот несколько примеров:

    • Система не загружается.
    • Файлы в системе повреждаются (часто вы можете увидеть ошибку ввода/вывода).
    • Подключенный диск (включая флешки/SD-карты) не работает должным образом.

    Опции программы fsck

    Команду fsck необходимо запускать с привилегиями суперпользователя или root. Вы можете использовать её с разными аргументами. Их использование зависит от вашего конкретного случая. Ниже вы увидите некоторые из наиболее важных опций:

    Как запустить fsck для исправления ошибок файловой системы Linux

    Чтобы запустить fsck, вам нужно убедиться, что раздел, который вы собираетесь проверить, не смонтирован. Для целей этой статьи я буду использовать свой второй диск /dev/sda, смонтированный в /mnt/disk_d.

    Вот что произойдёт, если я попытаюсь запустить fsck, когда раздел смонтирован.


    Если диск не только смонтирован, но и используется (например, диск, смонтированный в корневую файловую систему), то ошибка будет «/dev/nvme0n1 is in use».

    Чтобы избежать этого, отключите раздел с помощью следующей команды (замените имя диска на ваше):

    Тогда можно будет безопасно запускать fsck.


    Понимание кодов выхода fsck

    После запуска fsck он вернёт код выхода. Эти коды можно увидеть в руководстве по fsck, запустив:

    Описание кодов выхода fsck:

    Флаг -y означает автоматически отвечать «да» на любые запросы от fsck для исправления ошибки.

    Точно так же вы можете запустить то же самое во всех файловых системах (с пропуском корневой файловой системы):

    Как запустить fsck на корневом разделе Linux

    В некоторых случаях вам может потребоваться запустить fsck в корневом разделе вашей системы. Поскольку вы не можете запустить fsck, пока раздел смонтирован, вы можете попробовать один из следующих вариантов:

    • Принудительно использовать fsck при загрузке системы
    • Запустите fsck в режиме восстановления

    Мы рассмотрим обе ситуации.

    Как принудительно проверить диск с помощью fsck при загрузке системы

    Это относительно легко выполнить, единственное, что вам нужно сделать, это создать файл с именем forcefsck в корневом разделе вашей системы. Используйте следующую команду:

    Затем вы можете просто принудительно перезагрузить или запланировать перезагрузку системы. Во время следующей загрузки будет выполнена проверка диска командой fsck. Если время простоя критично, рекомендуется тщательно его спланировать, поскольку, если в вашей системе много используемых inode, выполнение fsck может занять дополнительное время.

    После загрузки системы проверьте, существует ли ещё файл:

    Если это так, вы можете удалить его, чтобы избежать появления fsck при каждой загрузке системы.

    Как запустить fsck в режиме восстановления

    Для запуска fsck в режиме восстановления требуется ещё несколько шагов. Сначала подготовьте вашу систему к перезагрузке. Остановите все критически важные службы, такие как MySQL/MariaDB и т. д., а затем введите.

    Во время загрузки удерживайте нажатой клавишу Shift, чтобы отобразилось меню grub. Выберите Advanced options («Дополнительные параметры»).


    Затем выберите Recovery mode («Режим восстановления»).


    В следующем меню выберите «fsck».


    Вас спросят, хотите ли вы перемонтировать / файловую систему. Выберите Yes («да»).


    Вы должны увидеть нечто подобное.


    Затем вы можете вернуться к нормальной загрузке, выбрав Resume («Возобновить»).


    Заключение

    В этом руководстве вы узнали, как использовать fsck и выполнять проверки согласованности в разных файловых системах Linux. Если у вас есть какие-либо вопросы о fsck, не стесняйтесь задавать их в разделе комментариев ниже.

    Читайте также: