Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Погрузитесь в игру Бильярд 3D: Русский бильярд — почувствуйте атмосферу настоящего бильярдного зала!

Бильярд 3D: Русский бильярд

Симуляторы, Спорт, Настольные

Играть

Топ прошлой недели

  • Oskanov Oskanov 9 постов
  • Animalrescueed Animalrescueed 46 постов
  • AlexKud AlexKud 33 поста
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
68
hypo69
hypo69
2 месяца назад
Лига Сисадминов
Серия Философия PowerShell

Философия PowerShell. Часть 3: Навигация и управление файловой системой. Знакомство с операторами логики и функциями⁠⁠

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

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


1. Концепция PowerShell Drives (PSDrives)

Прежде чем начать работать с файлами, важно понять концепцию PowerShell-дисков (PSDrives). В отличие от cmd.exe, где диски — это только буквы C:, D: и так далее, в PowerShell "диск" — это абстракция для доступа к любому иерархическому хранилищу данных.

> Get-PSDrive

Результат покажет не только физические диски, но и псевдо-диски:

Эта унификация означает, что вы можете "зайти" в реестр (Set-Location HKLM:) и получить список его ключей той же командой Get-ChildItem, которой получаете список файлов на диске C:. Это невероятно мощная концепция.

Примеры работы с различными провайдерами

  • Хранилище сертификатов (Cert:) Позволяет работать с цифровыми сертификатами так, будто это файлы в папках.

    Задача: Найти все SSL-сертификаты на локальной машине, срок действия которых истекает в ближайшие 30 дней.
    > Set-Location Cert:\LocalMachine\My
    > Get-ChildItem | Where-Object { $_.NotAfter -lt (Get-Date).AddDays(30) } | Select-Object Subject, NotAfter, Thumbprint

Переменные окружения (Env:) Предоставляет доступ к переменным окружения Windows (%PATH%, %windir% и т.д.) как к файлам.

Задача: Получить путь к системной папке Windows и добавить к нему путь к System32.

Получаем значение переменной windir:
> $windowsPath = (Get-Item Env:windir).Value
Собираем полный путь
> $system32Path = Join-Path -Path $windowsPath -ChildPath "System32"
> Write-Host $system32Path

Реестр Windows (HKCU: и HKLM:) Представьте, что реестр — это просто еще одна файловая система. Ветки — это папки, а параметры — свойства этих папок.

Задача: Узнать полное название установленной версии Windows из реестра.
Переходим в нужную ветку реестра:
> Set-Location "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
Получаем свойство (параметр реестра) с именем "ProductName"
> Get-ItemProperty -Path . -Name "ProductName"

Переменные сессии (Variable:) Позволяет управлять всеми переменными ($myVar, $PROFILE, $Error и т.д.), определенными в текущей сессии.

Задача: Найти все переменные, связанные с версией PowerShell ($PSVersionTable, $PSHOME и др.).
Находим все переменные, начинающиеся с "PS":
> Get-ChildItem Variable:PS*

Получаем значение конкретной переменной:
> Get-Variable -Name "PSVersionTable"

2. Навигация и анализ

Основы навигации
- Узнать, где мы находимся (возвращает объект PathInfo):
> Get-Location # Псевдонимы: gl, pwd

- Переход в корень диска C:
> Set-Location C:\ # Псевдонимы: sl, cd

- Переход в домашнюю папку текущего пользователя:
> Set-Location ~

Показать содержимое текущей папки (возвращает коллекцию объектов):
> Get-ChildItem # Псевдонимы: gci, ls, dir

- Рекурсивный поиск. Найти файл hosts в системе, игнорируя ошибки "Доступ запрещен":
> Get-ChildItem C:\ -Filter "hosts" -Recurse -ErrorAction SilentlyContinue

Ключ -Recurse (Рекурсивно): Заставляет командлет работать не только с указанным элементом, но и со всем его содержимым.

Ключ -ErrorAction SilentlyContinue: Инструкция игнорировать ошибки и продолжать работу молча.

Анализ дискового пространства

Классический пример мощи конвейера: найти, отсортировать, отформатировать и выбрать.


Подсказка как вводить длинные команды.

PowerShell позволяет разбивать их на несколько строк для удобства чтения.

  • После оператора конвейера (|): Это самый частый и удобный способ. Просто нажмите Enter после символа |. PowerShell увидит, что команда не завершена, и будет ждать продолжения на следующей строке.

  • В любом другом месте: Используйте символ обратной кавычки (backtick) ` в конце строки, а затем нажмите Enter. Этот символ говорит PowerShell: "Команда продолжится на следующей строке".

  • В редакторах (ISE, VS Code): Сочетание клавиш Shift+Enter обычно автоматически вставляет перенос строки, не запуская команду.

Фильтрация содержимого и операторы логики

- Найти все .exe файлы. Параметр -Filter работает очень быстро:
> Get-ChildItem C:\Windows -Filter "*.exe"

Get-ChildItem возвращает коллекцию объектов. Мы можем передать ее по конвейеру в Where-Object для дальнейшей фильтрации.

> Get-ChildItem C:\Windows | Where-Object { $_.PSIsContainer -eq $false }

Эта команда знакомит нас с одним из фундаментальных понятий в скриптах PowerShell: операторами сравнения.

Операторы сравнения и логики

Это специальные ключи для сравнения значений. Они всегда начинаются с дефиса (-) и являются основой для фильтрации данных в Where-Object и построения логики в if.

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

Примеры использования в файловой системе

  • Найти файл по точному имени (с учетом регистра):

    > Get-ChildItem C:\Windows\System32 -Recurse | Where-Object { $_.Name -eq "kernel32.dll" }

  • Найти все файлы, начинающиеся с "host", но не являющиеся папками:

    > Get-ChildItem C:\Windows\System32\drivers\etc | Where-Object { ($_.Name -like "host*") -and (-not $_.PSIsContainer) }

  • Найти все файлы журналов (.log), размер которых превышает 50 мегабайт:

    > Get-ChildItem C:\Windows\Logs -Filter "*.log" -Recurse | Where-Object { $_.Length -gt 50MB }

  • Найти все временные файлы (.tmp) и файлы бэкапов (.bak) для очистки: Оператор -in здесь гораздо элегантнее, чем несколько условий с -or.

    > $extensionsToDelete = ".tmp", ".bak", ".old" Get-ChildItem C:\Temp -Recurse | Where-Object { > $_.Extension -in $extensionsToDelete }

  • Найти все файлы Word (.docx), созданные за последнюю неделю:

    > $oneWeekAgo = (Get-Date).AddDays(-7) Get-ChildItem C:\Users\MyUser\Documents -Filter "*.docx" -Recurse | Where-Object { $_.CreationTime -ge $oneWeekAgo }

  • Найти пустые файлы (размером 0 байт), которые не являются папками:

    > Get-ChildItem C:\Downloads -Recurse | Where-Object { ($_.Length -eq 0) -and (-not $_.PSIsContainer) }

  • Найти все исполняемые файлы (.exe), которые были изменены в этом году, но НЕ в этом месяце. Этот сложный пример демонстрирует мощь комбинирования операторов.

    > Get-ChildItem C:\Program Files -Filter "*.exe" -Recurse |
    Where-Object {
    ($_.LastWriteTime.Year -eq (Get-Date).Year) -and ($_.LastWriteTime.Month -ne (Get-Date).Month)
    }

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

Будьте внимательны с рекурсией:

  • Если очень много файлов/папок — -Recurse может рекурсивно заходить в десятки тысяч элементов.

  • Символические ссылки / циклические ссылки — могут вызывать бесконечную рекурсию.

  • Файлы без прав доступа — могут блокировать выполнение.

4. Создание, управление и безопасное удаление

Создание, копирование и перемещение:


> New-Item -Path "C:\Temp\MyFolder" -ItemType Directory
> Add-Content -Path "C:\Temp\MyFolder\MyFile.txt" -Value "Первая строка"
> Copy-Item -Path "C:\Temp\MyFolder" -Destination "C:\Temp\MyFolder_Copy" -Recurse

Безопасное удаление

Remove-Item — потенциально опасный командлет, поэтому в PowerShell есть встроенные механизмы защиты. Ключ -WhatIf (Что если?): Ваш лучший друг. Он не выполняет команду, а лишь выводит в консоль сообщение о том, что бы произошло.

> Remove-Item C:\Temp\MyFolder -Recurse -Force -WhatIf

Только убедившись, что все верно, убираем -WhatIf и ВЫПОЛНЯЕМ команду
> Remove-Item C:\Temp\MyFolder -Recurse -Force


Введение в функции

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

Как использовать и сохранять функции

Существует три основных способа сделать ваши функции доступными:

Способ 1: Временный (для тестов) Вы можете набрать в консопли или просто скопировать и вставить весь код функции в консоль PowerShell. Функция будет доступна до закрытия этого окна.

Способ 2: Постоянный, но ручной (через .ps1 файл) Это самый распространенный способ для организации и обмена инструментами. Вы сохраняете функцию в файл .ps1 и загружаете ее в сессию, когда она вам нужна.

Способ 3: Автоматический (через профиль PowerShell) Это самый мощный способ для ваших личных, часто используемых инструментов.

Что такое профиль PowerShell? Это специальный скрипт .ps1, который PowerShell автоматически запускает каждый раз при старте. Все, что вы поместите в этот файл — псевдонимы, переменные и, конечно, функции — будет доступно в каждой вашей сессии по умолчанию.

Пример 1: Поиск дубликатов файлов

Давайте пройдем все шаги на примере функции Find-DuplicateFiles.

Шаг 1: Определяем код функции

Шаг 2 (Вариант А): Сохраняем в отдельный файл для ручной загрузки

Сохраняем
> Set-Content -Path ".\Find-DuplicateFiles.ps1" -Value $functionCode
Загружаем
> . .\Find-DuplicateFiles.ps1

Dot Sourcing (. .\Find-DuplicateFiles.ps1): Эта специальная команда выполняет скрипт в текущем контексте, делая все его функции и переменные доступными в вашей консоли.

Вызываем:
> Find-DuplicateFiles -Path "C:\Users\$env:USERNAME\Downloads"

  1. Шаг 2 (Вариант Б): Добавляем в профиль для автоматической загрузки Сделаем эту функцию доступной всегда.

    Что такое профиль PowerShell? Это специальный скрипт .ps1, который PowerShell автоматически запускает каждый раз при старте. Все, что вы поместите в этот файл — псевдонимы, переменные и функции — будет доступно в каждой вашей сессии по умолчанию.

  2. Находим путь к файлу профиля. PowerShell хранит его в переменной $PROFILE.

    1. > $PROFILE

    Создаем файл профиля, если он не существует:

    > if (-not (Test-Path $PROFILE)) { New-Item -Path $PROFILE -Type File -Force }

  3. Добавляем код нашей функции в конец файла профиля.

    Add-Content -Path $PROFILE -Value $functionCode

  4. Перезапустите PowerShell (или выполните . $PROFILE), и теперь ваша команда Find-DuplicateFiles будет доступна всегда, как и Get-ChildItem.

Пример 2: Создание ZIP-архива с резервной копией

Код для файла Backup-FolderToZip.ps1:

Детальный разбор функций я сделаю следующих частях.


Справочник командлетов для работы с файловой системой

1. Основные командлеты

Нужно прочитать содержимое текстового файла? Используйте Get-Content. Нужно полностью перезаписать файл новым содержимым? Используйте Set-Content. Нужно добавить строчку в лог-файл, не стирая старые данные? Используйте Add-Content. Нужно проверить, существует ли файл перед записью? Используйте Test-Path.

2. Специализированные командлеты для продвинутых задач

Когда базовых командлетов недостаточно, PowerShell предлагает более специализированные инструменты. Они не дублируют базовые, а расширяют ваши возможности.

  • Работа с путями (Path)

    • Join-Path: Безопасно объединяет части пути, автоматически вставляя \.

    • Split-Path: Разбивает путь на части (папка, имя файла, расширение).

    • Resolve-Path: Преобразует относительный путь (например, . или ..\files) в полный, абсолютный.

  • Работа со свойствами и содержимым (Item Properties and Content)

    • Get-ItemProperty: Получает свойства конкретного файла (например, IsReadOnly, CreationTime).

    • Set-ItemProperty: Изменяет свойства файла или папки.

    • Clear-Content: Удаляет всё содержимое из файла, но оставляет сам файл пустым.

  • Продвинутая навигация (Location Stack)

    • Push-Location: "Запоминает" текущую директорию и переходит в новую.

    • Pop-Location: Возвращается в директорию, которую "запомнил" Push-Location.

  • Управление правами доступа (ACL)

    • Get-Acl: Получает список прав доступа (ACL) для файла или папки.

    • Set-Acl: Устанавливает права доступа для файла или папки (сложная операция).

Нужно изменить атрибут файла, например, сделать его «только для чтения»? Используйте Set-ItemProperty. Нужно полностью очистить лог-файл, не удаляя его? Используйте Clear-Content. Нужно временно перейти в другую папку в скрипте, а потом гарантированно вернуться назад? Используйте Push-Location и Pop-Location. Нужно узнать, кто имеет права на доступ к папке? Используйте Get-Acl.

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

Философия PowerShell на github:

История и первый командлет

Часть 2: Конвейер (Pipeline), переменные, Get-Member, файл .ps1 и экспорт результатов. Исходники ко второй части:
system_monitor.ps1

Часть 3: Навигация и управление файловой системой.
Исходники к третьей части:
Find-DuplicateFiles.ps1
Backup-FolderToZip.ps1

Полезно? Подпишись.
Понравилось — ставь «+»
Удачи! 🚀

UPD:

Вышла четвертая часть Философия PowerShell. Часть 4. Интерактивная работа: Out-ConsoleGridView

Показать полностью 20
[моё] Powershell Системное администрирование Файловая система Windows Microsoft IT Гайд Длиннопост
47
TheFounder
TheFounder
1 год назад

Код идеален, но все равно получаешь исключения IOError или OSError?⁠⁠

Код идеален, но все равно получаешь исключения IOError или OSError?

Эти ошибки — проблемы файловой системы. Система попросту не может обратиться к файлу или вообще перезаписать его.

IOError или OSError происходит, когда операция ввода-вывода (например, запись в файл) не удается по различным причинам: файл или директория заняты другим процессом, ошибки диска, доступа, указание неправильного «имени».

Разницы в этих ошибках нет.

Все проблемы нужно искать в вариациях расширений, банальном отсутствии доступа "администратора". Мы надеемся, что эти варианты вы переберете самостоятельно👎

Если что-то не так с простой перезаписью, ошибка выглядит вот так:

OSError([arg])

Но бывают случаи сложнее:

OSError(errno, strerror[, filename[, winerror[, filename2]]])

Вторая форма конструктора устанавливает соответствующие атрибуты. Первые два относятся к соответственно кодам ошибок самой Windows, filename/filename 2 как раз указывают на проблемные файлы.

У OSError есть подклассы исключений, они возникают в соответствии с системным кодом ошибки:

Например, ConnectionError возникает, когда одноранговый узел отклоняет попытку подключения. Соответствует errno ECONNREFUSED.

Исключение NotADirectoryError возникает, когда совершается попытка операции с каталогом, например

os.listdir(), а на самом деле путь не является каталогом.

FileNotFoundError: [Errno 2] No such file or directory: 'filename' — такое исключение возникает, когда файла не существует.

Поэтому после ошибок IOError или OSError нужно внимательно прошерстить код на обращения к файловой системе, оценить адрес файла. Как минимум убедиться, существует ли такой каталог вообще...

И не забывайте, что ваши файлы могут быть открыты программами, самой Windows и службами... А это может прерывать процесс перезаписи или вообще обращения к файлу.

Кстати, не забывайте заходить на StackOverflow и учиться на чужих ошибках: stackoverflow.com

Показать полностью 1
Программирование IT Программист Удаленная работа Код Тестирование Файловая система Системная ошибка
1
8
Alex268
1 год назад
GNU/Linux

Разметка SD с 4096 allocation unit size⁠⁠

Для прошивки 3D принтера требуется SD карточка:

Пытаюсь форматнуть, единственное, где нашел возможность поставить размер это mkfs.fat.

Но как не пробую, fdisk говорит, что размер сектора как был, так и остается 512.

Как сделать нужную разметку?

Компьютерная помощь Linux Файловая система
9
8
Аноним
Аноним
1 год назад
Лига Сисадминов

Пользователь забыл куда скопировал файлы, о/с: Windows 10. Как их теперь найти?⁠⁠

Пару дней назад (точная дата есть), юзер перенес и, вероятно, переименовал несколько файлов и папок внутри файловой системы Winows 10. И забыл куда. Возможно ли как-то посмотреть журнал его действий или, на худой конец, откатить систему? Все манипуляции проводились на диске D, все системные файлы, на диске C.
Речь идет не о файлах самой винды, а о рабочих документах: экселевские таблички, вордовские файлы, пдфки и пр.

Спасибо!

Windows Файловая система Текст Компьютерная помощь
43
7
Thavion
Thavion
1 год назад
GNU/Linux

Помогите определиться с выбором файловой системы⁠⁠

Всем доброго времени.

Имеется нотик, в который я планирую воткнуть второй ССД, досыпать оперативы до 32 гиг и поставить линукс. Буду ставить Fedora.
Покурив этих ваших интернетов, так и не смог определиться, какую файловую систему я хочу. Из множества последнего просмотренного, очень интересно или ZFS или F2FS. Помогите, пожалуйста, советом.

Цели: обычный домашний комп для игр(да, именно из-под линукса, я так хочу), серфинга, музла и, может быть, в некотором будущем, Unreal Engine 5, но, это не точно. Интернет на этом нотике хороший будет гарантированно не всегда, т.к. я перемещаюсь по миру, на берегу бываю, а не нахожусь. Спутниковый Inmarsat медленный, пока нам тут старлинков не навтыкали, буду страдать.

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

Заранее благодарю.

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

Показать полностью
Linux Файловая система Нужен совет Текст
51
18
raidshadowlegend
raidshadowlegend
1 год назад
Лига Сисадминов

Куда могло исчезнуть дисковое пространство? (5/5)⁠⁠

Подытожим этот короткий цикл последним случаем.


Файловая система только для чтения

Последний из рассматриваемых кейсов может произойти из-за проблем с самим жёстким диском:

Мы не можем создать новый файл, хотя явно видно, что дисковое пространство у нас ещё есть. Посмотрим в каком режиме смонтирована файловая система:

Вывод mount даёт нам подсказку, что наша rootfs смонтирована только для чтения (ro).

Теперь имеет смысл приступить к чтению системных логов, чтобы лучше понять что именно произошло:

В логах видно, что ядро перевело файловую систему в режим read-only из-за - sysrq: Emergency Remount R/O.

Объяснений произошедшему может быть достаточно много. Тут сложно вывести какую-то общую рекомендацию для решения. Что нужно будет сделать наверняка: просмотреть сообщения dmesg, более детально логи системного журнала, сделать SMART тест жесткого диска.

Заключение

Когда ядро сталкивается с проблемами в работе файловых систем, оно ведёт себя в соответствии с аргументом error= команды mount. Этот аргумент может принимать следующие параметры:

  • errors=continue - игнорирует ошибки, однако помечает файловую систему как некорректную, после этого монтирование продолжается.

  • errors=remount-ro - перемонтирует файловую систему в режим "только для чтения".

  • errors=panic - аварийно завершает процесс монтирования и блокирует работу системы.

Нужное поведение при монтировании можно настроить в /etc/fstab.

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

Показать полностью 2
IT Linux Будни сисадмина Сисадмин Файловая система Операционная система
4
151
mfc166
mfc166
2 года назад
GNU/Linux
Серия Linux

Использование Timeshift для управления снимками в Debian на Btrfs⁠⁠

Всем привет, на связи Уханов. В прошлом посте мы поприкалыавались на тему создания автоматических снимков файловой системы BTRFS в Debian. Тогда в конце заметки я упомянул, что Grub можно научить грузить систему прямо из снимка. Давайте сделаем это, а заодно, рассмотрим другую программу для управления снимками.

Нюанс установки системы

В посте про установку Debian на subvolume BTRFS я подробно рассказывал про процесс. Принцип действий будет тот-же, но subvolume должно быть только два: @ и @home. Subvolume @ мы будем использовать для корня файловой системы. Вот только нюанс в том, что установщик создаёт первый subvolume с именем @rootfs. Начнём.

Итак, дорогой друг, ты уже разметил диск, создал файловую систему и дошёл до этапа установки базовой системы. Словом, всё как в руководстве .

Итак, жми CTRL+ALT+F2 и погружайся в консоль. Осмотримся что у на по дискам:

df

Отмонтируем всё, что касается /target

umount /dev/sda1 && umount /dev/sda3

Примонтируем нашу BTRFS для работы с ней:

mount /dev/sda3 /mnt

Посмотрим что там внутри

cd /mnt ls

Как я и говорил, там один subvolume с именем @rootfs. Нам надо его переименовать, но система сделать это не даст. Ты же помнишь, что в BTRFS снимок - это тоже subvolume? Делаем финт ушами снимок subvolume, называем его @ и удаляем старый subvolume с именем @rootfs.

btrfs subvolume snapshot /mnt/@rootfs /mnt/@ btrfs subvolume delete /mnt/@rootfs

Создаём subvolume для домашних каталогов:

btrfs subvolume create @home

Проверяем сделанное:

btrfs subvolume list /mnt

Мы должны видеть два subvolume: @ и @home. Отмонтируем и монтируем корень уже куда надо:

umount /mnt mount -o rw,noatime,compress=lzo,space_cache,subvol=@ /dev/sda3 /target

Создадим каталоги:

mkdir -p /target/boot/efi mkdir -p /target/home

Монтируем оставшееся:

mount /dev/sda1 /target/boot/efi

mount -o rw,noatime,compress=lzo,space_cache,subvol=@home /dev/sda3 /target/home

Заметьте, что в отличие от предыдущей заметки я монтирую не через subvolid, а через subvol. То есть не по id, а по имени. Это важно. Там-же пишем и в fstab

nano /target/etc/fstab

Примерно так:

Жмём CTRL+ALT+F1 и продолжаем установку.

Установка Timeshift

Timeshift - свободная программа, предназначенная для автоматического периодического резервного копирования и восстановления системы Linux. Она умеет создавать резервные копии через rsync или снимки BTRFS вручную или по расписанию. Установим:

sudo apt install timeshift

Пройдём несложную процедуру настройки и создадим тестовый снимок:

Создание снимков при работе APT

Для того, чтобы снимки автоматически создавались при установке, удалении и обновлении пакетов, необходимо поставить пакет timeshift-autosnap-apt. Начнём.

sudo apt install git make

git clone https://github.com/wmutschl/timeshift-autosnap-apt.git /home/$USER/timeshift-autosnap-apt

cd /home/$USER/timeshift-autosnap-apt

sudo make install

Проверим создание снимков установкой Midnight Commander:

sudo apt install mc

Видим, что снимок создан:

Загрузка системы из снимка

Для этого нам потребуется пакет grub-btrfs. Установим его.

git clone https://github.com/Antynea/grub-btrfs.git /home/$USER/grub-btrfs

cd /home/$USER/grub-btrfs

sudo make install

Теперь надо включить пункт меню загрузки:

nano /etc/default/grub-btrfs/config

Раскомментируйте пункт GRUB_BTRFS_SUBMENUNAME

Мы видим, что теперь при установке пакетов редактируется меню загрузчика GRUB:

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

Восстановление

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

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

Программа умеет делать копии и на файловой системе EXT4 при помощи rsync.

Оригинал как обычно в моём блоге.

Показать полностью 11
[моё] Linux Debian Файловая система Резервное копирование Длиннопост
46
57
mfc166
mfc166
2 года назад
GNU/Linux
Серия Linux

Автоматическое создание снимков BTRFS при помощи Snapper⁠⁠

В комментариях был вопрос о том, зачем ставить систему на subvolume BTRFS. Одна из приятных возможностей, которые открываются при таком подходе, гибкое использование снимков. Давайте автоматизируем их создание при помощи Snapper. Он из коробки создаёт снимки при работе APT. Один до и один после. Так можно точно увидеть что изменилось в процессе работы пакетного менеджера. Разделение файловой системы на subvolume позволяет точно разделять котлет от мух.
Возьмём систему с двумя subvolume :

  • @rootfs для корневой файловой системы. Тут ты всё сам понимаешь. Именно в этом subvolume будут происходить изменения когда ты что-то устанавливаешь или обновляешь.

  • @home для домашних каталогов. Ты же не хочешь при откате обновлений системы потерять свои документы или фото? Поэтому отделяем.

Установка Snapper

Мы будем использовать Snapper - инструмент, упрощающий и автоматизирующий работу со снимками. Он позволяет удобно создать снимок subvolume как вручную, так и автоматически. Автоматически снимки создаются по таймеру, при загрузке и при работе пакетного менеджера APT. Начнём.

apt install snapper

Если мы работаем в графическом режиме, ставим GUI

apt install snapper-gui

Надо создать начальную конфигурацию под каждый subvolume

snapper -c root create-config /  snapper -c home create-config /home

Использование

Снимки бывают трёх типов:

  • Single. Просто одиночный снимок, созданный вручную или автоматически.

  • Pre. Снимок, созданный перед определённым событием. Например, перед работой APT.

  • Post. Снимок, созданный после определённого события. Например, после работы APT. Обязательно ссылается на pre снимок.

Например я установлю Midnight Commander:

sudo apt install mc

После чего просмотрю снимки:

sudo snapper list

Snapper-Gui надо запускать через sudo, иначе снимков не видно. Вот снимки после установки MC:

Просмотр изменений

Увидеть что изменилось можно командой сравнения двух снимков. Для этого надо указать номера снимков.

snapper status 1..2

Вывод команды покажет изменения в снимках:

В Snapper-Gui выделяем два снимка и нажимаем кнопку Changes:

Можно увидеть и разницу в файлах:

sudo snapper diff 1..2

В Snapper-Gui всё это удобнее и тоже хорошо видно на скриншоте выше.

Отмена изменений

sudo snapper undochange 1..2

Секунда и APT не знает ни про какой MC.

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

Это простые BTRFS снимки и в случае невозможности загрузиться в систему можно можно загрузиться с флешки и восстановить систему из снимка. Не знаю как Debian, но у Arch Linux можно в Grub добавить пункт загрузки из снимка.

В следующий раз рассмотрим ещё одно аналогичное, но более удобное приложение.

Оригинал как обычно в моём блоге.

Показать полностью 7
[моё] Linux Debian Файловая система Резервное копирование Длиннопост
4
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии