В Windows есть встроенный механизм программного хранения данных - Storage Spaces. По сути, это аналог Linux LVM + software RAID, который позволяет объединять диски в пул и создавать на их основе отказоустойчивые тома без стороннего ПО и RAID-контроллеров.
1. Physical disks - физические диски (HDD/SSD, SATA/NVMe, USB тоже поддерживаются).
2. Storage Pool - пул хранения, в который объединяются диски.
3. Virtual Disk (Space) - логический диск с заданным уровнем отказоустойчивости.
На уровне Virtual Disk выбирается тип защиты данных.
Simple - без отказоустойчивости (аналог RAID0). Максимальная скорость и объем.
Two-way mirror - зеркалирование данных на два диска (аналог RAID1).
Three-way mirror - зеркалирование на три диска (для критичных данных).
Parity - распределенная четность (аналог RAID5/6, зависит от конфигурации).
встроено в Windows (Server и Pro-версии);
не требует перезагрузки при добавлении дисков;
поддерживает hot-swap;
можно расширять пул на ходу;
работает поверх обычных дисков без контроллера.
- Зеркала отлично подходят для VM, файловых серверов и рабочих станций.
- Parity экономит место, но хуже по записи, особенно на мелких I/O.
- Для системных дисков чаще используют зеркало, а не parity.
- Управлять можно через GUI или PowerShell (Get-StoragePool, New-VirtualDisk).
небольшой сервер или NAS на Windows;
тестовые и офисные инфраструктуры;
когда нет аппаратного RAID, но нужна отказоустойчивость.
#storage #raid
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
asciinema записывает не видео, а последовательность команд и вывода терминала с таймингами. В результате получается легкий файл, который можно:воспроизводить в браузере;
встраивать в документацию;
использовать в обучающих материалах;
пересматривать прямо в терминале.
apt install asciinema
asciinema rec
Ctrl+D или exit. По умолчанию создается файл формата .cast, в котором хранится вся запись.
asciinema play demo.cast
Либо загрузить на сайт asciinema:
asciinema upload demo.cast
После загрузки вы получите ссылку и HTML-код для встраивания записи в сайт или wiki.
минимальный размер файлов;
идеальная читаемость текста;
можно копировать команды прямо из записи;
легко автоматизировать;
отлично подходит для документации.
#linux #terminal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1
В ext4 есть полезная особенность: при создании файловой системы резервируется 5% пространства. Обычно это место доступно только root и нужно, чтобы система не умерла, когда диск заполнен под завязку. В критических ситуациях этот резерв реально спасает, без него многие сервисы просто перестают работать (привет ZFS и lvm-thin).
tune2fs -m 3 /dev/mapper/root
# или
tune2fs -m 3 /dev/sda3
Вместо 5% оставляем 3%, а разница становится доступной системе. На больших разделах это могут быть десятки гигабайт. Теоретически можно поставить и 0%:
tune2fs -m 0 /dev/sda3
Но так делать не советую. Минимум 1% лучше оставить, а оптимальный компромисс те же 3%.
Создаем swap-файл на 1 ГБ:
dd if=/dev/zero of=/swap bs=1024 count=1000000
mkswap /swap
chmod 0600 /swap
swapon /swap
Отключить и удалить его так же просто:
swapoff -a
rm /swap
fallocate -l 10G /big_file
В экстренной ситуации его можно удалить и мгновенно получить несколько гигабайт свободного места, чтобы система ожила.
#linux #ext4
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18
Please open Telegram to view this post
VIEW IN TELEGRAM
😁15❤1🤔1🤡1
tcpdump знают все. Но часто его используют как
tcpdump -i any и тонут в потоке пакетов. Ниже будут написаны фильтры, которые действительно спасают.
tcpdump -i eth0 host 10.10.10.5
Только исходящий:
tcpdump -i eth0 src 10.10.10.5
Подсеть:
tcpdump net 192.168.1.0/24
tcpdump tcp port 80
Несколько портов:
tcpdump 'tcp port 80 or tcp port 443'
Исключить SSH:
tcpdump 'not port 22'
tcpdump 'tcp[tcpflags] & tcp-syn != 0'
RST-пакеты (поиск проблем с соединением):
tcpdump 'tcp[tcpflags] & tcp-rst != 0'
tcpdump -A -s 0 'tcp port 80' | grep "POST"
Фильтр по размеру пакета:
tcpdump 'greater 1000'
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn'
Повторные передачи:
tcpdump 'tcp[tcpflags] & tcp-ack != 0'
tcpdump -i eth0 -s 0 -w dump.pcap
Анализировать потом можно в Wireshark, так удобнее разбирать сложные кейсы.
#linux #tcpdump
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Иногда нужно срочно освободить порт: сервис завис, не перезапускается, новый экземпляр не стартует, а разбираться почему будем потом. Задача простая: найти процесс по порту и завершить его.
ss -tulnp | grep 8080
tcp LISTEN 0 5 0.0.0.0:8080 0.0.0.0:* users:(("python3",pid=5152,fd=3))
kill 5152
Рабочий вариант, но требует двух шагов.
lsof -i:8080
Пример вывода:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python3 5156 root 3u IPv4 41738 0t0 TCP *:http-alt (LISTEN)
И сразу завершаем процесс:
kill 5156
А если хочется вообще в одно действие:
lsof -i:8080 -t | xargs kill
lsof -i
lsof -i TCP:25
lsof -i TCP@1.2.3.4
Очень наглядно показывает, кто, куда и по какому протоколу подключен.
killport 8080
В стандартных репозиториях ее обычно нет, придется скачать готовый бинарник.
На Linux без нее легко обойтись, а вот на Windows такая утилита особенно полезна.
Можно сначала проверить, что именно будет завершено:
killport 445 --dry-run
Would kill process 'System' listening on port 445
Сначала смотрим, потом убиваем - все как надо.
#linux #network
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
pv (Pipe Viewer) - небольшая, но крайне полезная утилита для работы с pipe в Linux/Unix. Она позволяет видеть скорость передачи данных, объем, время работы, а при необходимости ограничивать пропускную способность. Есть почти во всех дистрибутивах:
apt install pv
dnf install pv
pv testfile > testfile_copy
Вы сразу видите скорость, объем и процент выполнения. Аналогично работает при сжатии:
pv testfile | gzip > testfile.gz
pv -L 50m testfile > testfile_copy
Тем же способом удобно душить дампы БД:
mysqldump db01 | pv -L 20m > db01.sql
Для каталогов можно передать размер вручную и получить корректный ETA:
tar -czf - /usr | pv -s $(du -sb /usr | grep -o '[0-9]*') > usr.tgz
pv -d <PID>
Показывает, какие файлы реально читаются/пишутся и с какой скоростью.
pv /dev/zero | ssh user@host 'cat > /dev/null'
#linux #pv
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤4
В linux есть малоизвестный, но крутой механизм хранения секретов прямо на уровне ядра -
trusted и encrypted keys. Это специальные типы ключей из подсистемы linux keyrings, которые позволяют защищать данные без хранения их в открытом виде на диске.Пример создания:
keyctl add encrypted dbkey "new user:passphrase 32" @s
Ключ автоматически расшифровывается ядром при использовании, но в файловой системе его содержимое не светится.
Пример:
keyctl add trusted tpmkey "new 32" @s
Даже root не сможет извлечь значение ключа, только использовать его.
защита LUKS (через systemd-cryptenroll);
хранение ключей для dm-crypt;
secrets для сервисов без plaintext-файлов;
привязка данных к конкретному железу.
#linux #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2
GRE и IPIP: простые туннели без VPN
Не всегда нужен полноценный VPN с TLS, сертификатами и клиентами. Иногда задача проще: соединить две сети, протянуть маршрут до подсети или завернуть трафик через удалённый узел. В таких случаях отлично подходят GRE и IPIP - легкие L3-туннели, встроенные прямо в ядро Linux.
▪️ IPIP - самый простой вариант
IPIP (IP-in-IP) - это инкапсуляция IP-пакета внутрь другого IP-пакета.
Работает только с IPv4 - IPv4.
Минимальный пример:
Сервер A (1.1.1.1):
Сервер B (2.2.2.2):
Добавляем маршруты - и сети начинают видеть друг друга.
▪️ GRE (Generic Routing Encapsulation) инкапсулирует практически любой L3-протокол. Поддерживает: IPv4 и IPv6, multicast и динамическую маршрутизацию (OSPF, BGP поверх туннеля)
Пример:
На второй стороне - зеркальная конфигурация.
⚠️ Важный момент: это не VPN
Ни IPIP, ни GRE не шифруют трафик.
Это просто инкапсуляция.
Если нужен encryption: поверх GRE можно поднять IPsec или использовать WireGuard вместо этого
🤩 Когда это удобно
Связать два датацентра;
Протянуть подсеть в облако;
Обойти ограничения провайдера;
Сделать статическую связку без сложной PKI.
Если задача маршрутизация, а не безопасность, то GRE/IPIP часто проще любого VPN.
#linux #networking
🧑💻 NetworkAdmin
Не всегда нужен полноценный VPN с TLS, сертификатами и клиентами. Иногда задача проще: соединить две сети, протянуть маршрут до подсети или завернуть трафик через удалённый узел. В таких случаях отлично подходят GRE и IPIP - легкие L3-туннели, встроенные прямо в ядро Linux.
IPIP (IP-in-IP) - это инкапсуляция IP-пакета внутрь другого IP-пакета.
Работает только с IPv4 - IPv4.
Минимальный пример:
Сервер A (1.1.1.1):
ip tunnel add tun0 mode ipip local 1.1.1.1 remote 2.2.2.2
ip addr add 10.10.10.1/30 dev tun0
ip link set tun0 up
Сервер B (2.2.2.2):
ip tunnel add tun0 mode ipip local 2.2.2.2 remote 1.1.1.1
ip addr add 10.10.10.2/30 dev tun0
ip link set tun0 up
Добавляем маршруты - и сети начинают видеть друг друга.
🤩 Плюсы:
минимальный overhead;
простота;
работает из коробки.🤩 Минусы:
только IPv4;
нет multicast;
нет шифрования;
GRE - гибче и мощнее.
Пример:
ip tunnel add gre1 mode gre local 1.1.1.1 remote 2.2.2.2 ttl 255
ip addr add 10.20.20.1/30 dev gre1
ip link set gre1 up
На второй стороне - зеркальная конфигурация.
🤩 GRE удобен, если:
нужно поднять OSPF между площадками;
протянуть несколько подсетей;
использовать FRR/Quagga;
строить overlay-сеть.
Ни IPIP, ни GRE не шифруют трафик.
Это просто инкапсуляция.
Если нужен encryption: поверх GRE можно поднять IPsec или использовать WireGuard вместо этого
Связать два датацентра;
Протянуть подсеть в облако;
Обойти ограничения провайдера;
Сделать статическую связку без сложной PKI.
Если задача маршрутизация, а не безопасность, то GRE/IPIP часто проще любого VPN.
#linux #networking
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤2
Регулярно настраиваю NFS под разные прикладные задачи, чаще всего временные. Когда нужно быстро перекинуть большой объем данных между серверами, NFS почти всегда выигрывает по скорости у scp/ssh, SMB и HTTP. Особенно в локальной сети.
Решил оформить краткую инструкцию, чтобы можно было сохранить и использовать как готовый чеклист.
mkdir /mnt/share
chown nobody:nogroup /mnt/share
Устанавливаем сервер NFS:
apt install nfs-kernel-server
Экспортируем каталог, например, только для клиента
172.16.10.25. Добавляем в /etc/exports:
/mnt/share 172.16.10.25(rw,all_squash,no_subtree_check,crossmnt)
Для всей подсети:
/mnt/share 172.16.10.0/24(rw,all_squash,no_subtree_check,crossmnt)
Для нескольких хостов будет удобнее отдельными строками:
/mnt/share 172.16.10.25(rw,all_squash,no_subtree_check,crossmnt)
/mnt/share 172.16.10.30(rw,all_squash,no_subtree_check,crossmnt)
Применяем конфигурацию:
systemctl restart nfs-server
systemctl status nfs-server
Для работы NFS должен быть доступен TCP порт 2049.
apt install nfs-common
Проверяем, что сервер отдает экспорт:
showmount -e 172.16.10.10
Export list for 172.16.10.10:
/mnt/share 172.16.10.25
Монтируем ресурс:
mkdir /mnt/share
mount 172.16.10.10:/mnt/share /mnt/share
Проверяем:
df -h | grep nfs
172.16.10.10:/mnt/share 80G 5.1G 72G 7% /mnt/share
Желательно убедиться, что используется NFSv4:
mount -t nfs4
Тестируем запись:
echo "hello nfs" > /mnt/share/test.txt
При необходимости можно добавить в
/etc/fstab:
172.16.10.10:/mnt/share /mnt/share nfs4 defaults 0 0
(и не забыть перевод строки в конце).
Для временных задач - это простой, быстрый и надежный вариант.
#linux #nfs
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3
В простых сетях DHCP-сервер и клиенты обычно находятся в одном сегменте. Клиент шлет broadcast-запрос, сервер отвечает и все работает. Но как только появляется маршрутизатор, broadcast дальше не идет, и DHCP внезапно ломается.
Именно для таких случаев и нужен DHCP relay.
Идея простая: маршрутизатор принимает DHCP-broadcast от клиента и пересылает его unicast’ом на DHCP-сервер в другой сети. Ответ сервера он так же передает обратно клиенту.
Клиент: DHCPDISCOVER (broadcast)
Маршрутизатор (relay): ловит запрос и отправляет его на DHCP-сервер
DHCP-сервер: выдает адрес с учетом подсети клиента
Relay: возвращает ответ клиенту
Ключевой момент - relay добавляет в пакет поле giaddr, по которому сервер понимает, из какой сети пришел запрос.
apt install isc-dhcp-relay
INTERFACES="eth1 eth2"
SERVERS="10.50.0.10"
systemctl restart isc-dhcp-relay
Готово. Клиенты из разных VLAN/подсетей будут получать IP от одного центрального DHCP-сервера.
Несколько VLAN, один DHCP-сервер
Офисы с централизованной сетевой инфраструктурой
Wi-Fi контроллеры и L3-коммутаторы
MikroTik / Cisco / Juniper - relay там настраивается аналогично
На DHCP-сервере должны быть описаны все подсети
UDP порты 67/68 должны быть разрешены
Без relay DHCP через маршрутизатор не работает по определению
#networking #dhcp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁16❤1
В linux все железо - это события. Вставили диск, появился интерфейс, подключили USB - ядро сгенерировало событие, а udev решил, что с ним делать. Если нужно не просто чтобы работало, а чтобы работало как надо, в дело идут udev rules.
udev rules - это правила, которые:
переименовывают устройства
задают права и владельцев
создают симлинки
запускают команды при подключении/отключении
Работают на уровне событий, без cron, демонов и костылей.
Свои правила кладут сюда:
/etc/udev/rules.d/
Файлы читаются в порядке номеров, например:
10-local.rules
99-usb.rules
Смотрим атрибуты:
udevadm info --query=all --name=/dev/sdb
Пишем правило:
SUBSYSTEM=="block", ENV{ID_SERIAL}=="WD_Elements_25A1", SYMLINK+="backup_disk"
Теперь диск всегда доступен как:
/dev/backup_disk
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE="0660", GROUP="dialout"
Больше не нужно chmod после каждой перезагрузки.
ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_LABEL}=="DATA", RUN+="/usr/local/bin/mount-data.sh"
udevadm control --reload
udevadm trigger
Или просто переподключить устройство.
#linux #udev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤4
Файловая система ext4 умеет уменьшаться штатно, при условии, что на разделе достаточно свободного места. В этом ее большое отличие от xfs, которая сжиматься не умеет вообще. Но есть важное ограничение: уменьшение ext4 возможно только в размонтированном виде. На живой системе это не работает.
Если нужно уменьшить корневой раздел, без перезагрузки не обойтись.
/sbin/resize2fs /dev/sda1 40G
Файловая система на
/dev/sda1 будет уменьшена до 40 ГБ, при условии, что данных там меньше этого объема. Перед и после операции настоятельно рекомендуется проверить файловую систему:
/sbin/e2fsck -yf /dev/sda1
Если раздел смонтирован, ничего не получится:
resize2fs: On-line shrinking not supported
e2fsck: Cannot continue, aborting.
/etc/initramfs-tools/hooks/resizefs:
#!/bin/sh
set -e
. /usr/share/initramfs-tools/hook-functions
copy_exec /sbin/e2fsck
copy_exec /sbin/resize2fs
/etc/initramfs-tools/scripts/local-premount/resizefs:
#!/bin/sh
set -e
/sbin/e2fsck -yf /dev/sda1
/sbin/resize2fs /dev/sda1 40G
/sbin/e2fsck -yf /dev/sda1
ls /boot | grep config
И пересобираем образ, например для последнего ядра:
update-initramfs -u -k 6.1.0-22-amd64
После этого перезагружаемся. Процесс будет выполнен до монтирования root, а значит безопасно с точки зрения блокировок. Если что-то пойдет не так, всегда можно загрузиться с другого ядра, где initramfs не трогали.
#ext4 #filesystems
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤3
Если нужно аккуратно ограничить потребление памяти процессом, systemd делает это буквально из коробки. Причем не грубо, а с понятной логикой: можно замедлять процесс, забирать у него память или в крайнем случае прибивать. Все параметры описаны в документации, но на практике используются лишь несколько ключевых. Разберу их на примере.
MemoryAccounting=yesВключает учет потребления памяти для юнита. Без этого остальные лимиты просто не работают.
MemoryHigh=2GМягкий лимит. Процесс может его превышать, но systemd начнет активно забирать память и тормозить выполнение. Основной и самый безопасный механизм.
MemoryMax=3GЖёсткий предел. При достижении процесс будет убит OOM Killer’ом. Использовать стоит осторожно, скорее как страховку.
MemorySwapMax=512MОграничение на использование swap. Полезно, если не хотите, чтобы сервис утонул в свопе.
Restart=on-failureПозволяет автоматически перезапустить сервис, если его убили по памяти.
OOMPolicy=killОпределяет поведение при OOM: либо корректная остановка (stop), либо жесткое убийство (kill).
[Unit]
Description=Node.js Worker
After=network.target
[Service]
ExecStart=/usr/bin/node /opt/app/worker.js
Restart=on-failure
MemoryAccounting=yes
MemoryHigh=2G
MemoryMax=3G
MemorySwapMax=512M
OOMPolicy=kill
[Install]
WantedBy=multi-user.target
node -e 'let a = "x".repeat(1024*1024*1024); setTimeout(()=>{}, 600000)'
Теперь запустим его с лимитами через systemd:
systemd-run --scope \
-p MemoryHigh=300M \
-p MemoryMax=400M \
node -e 'let a = "x".repeat(1024*1024*1024); setTimeout(()=>{}, 600000)'
Процесс запросит гигабайт, но реально получит лишь разрешенный объем.
Проверяем:
ps -o pid,rss,cmd -C node
RSS будет в пределах лимита, даже если виртуальная память (VSZ) гораздо больше.
#linux #systemd
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
Пользователи, которые работают с корпоративными ресурсами через RDP/RDS, часто упираются в странную проблему: нужно сменить пароль, а привычный
Ctrl + Alt + Del ведет себя неправильно.⚠️ Причина простая - в RDP-сессии это сочетание перехватывается локальным компьютером, а не удалённым сервером. В итоге открывается окно безопасности вашей рабочей машины, а не терминального сервера.
Но варианты есть.
Это полный аналог
Ctrl + Alt + Del, но именно для RDP.Работает, если вы подключены напрямую к серверу.
Когда есть цепочка из нескольких RDP-сессий,
Ctrl + Alt + End срабатывает только в первом окне и дальше не проходит.В этом случае помогает экранная клавиатура:
Запустите
osk.exeЗажмите
Ctrl + Alt на физической клавиатуреНажмите
Del на экранной клавиатуреВ итоге появится окно Windows Security уже на нужном сервере.
Через команду оболочки:
explorer.exe shell:::{2559a1f2-21d7-11d4-bdaf-00c04f60b9f0}
Через VBS-скрипт:
Set objShell = CreateObject("Shell.Application")
objShell.WindowsSecurity
Через PowerShell:
powershell.exe -noprofile -noninteractive -command "(New-Object -ComObject shell.application).WindowsSecurity()"
Пользователь кликает по ярлыку и сразу попадает в нужное окно смены пароля, без плясок с клавишами.
Мелочь, но сильно упрощает жизнь в RDS-среде, особенно для не самых технических пользователей.
#windows #rdp #rds
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍5🤡1
Когда одного сетевого линка уже не хватает по пропускной способности или хочется повысить отказоустойчивость, на помощь приходит LACP - Link Aggregation Control Protocol (IEEE 802.3ad). Он позволяет объединить несколько физических интерфейсов в один логический канал.
Важно сразу понять: LACP - это не удвоение скорости для одного соединения, а распределение потоков между линками.
увеличение суммарной пропускной способности
отказоустойчивость (один линк упал - трафик идет по другим)
прозрачность для приложений и сервисов
Частые кейсы: сервера виртуализации, NAS, storage, аплинки между коммутаторами.
LACP объединяет интерфейсы в bond / lag.
Трафик распределяется по хешу: MAC, IP, порт назначения (зависит от настроек).
Один TCP-поток всегда идёт по одному физическому каналу, чтобы не было reorder пакетов.
modprobe bondingПример
/etc/network/interfaces:
auto bond0
iface bond0 inet static
address 10.10.0.10/24
bond-mode 802.3ad
bond-miimon 100
bond-slaves eno1 eno2
bond-xmit-hash-policy layer3+4
После поднятия можно проверить:
cat /proc/net/bonding/bond0
LACP должен быть настроен с двух сторон.
Если на сервере включен 802.3ad, а на свитче обычный
access/trunk, линк либо не поднимется, либо будет флапать.На большинстве управляемых коммутаторов это выглядит как LAG / Port-Channel с режимом LACP active.
ожидание, что один iperf покажет x2 скорость
разные настройки LACP на сервере и коммутаторе
объединение портов с разной скоростью (1G + 10G - это плохая идея)
#networking #lacp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Когда сказали, что отправят ключ почтой и через неделю приходит конверт с этим..
#юмор
🧑💻 NetworkAdmin
#юмор
Please open Telegram to view this post
VIEW IN TELEGRAM
😁27👍8🔥4🍾1
Настраивал как-то bash-скрипт бэкапа с ротацией старых копий. Для удобства и сам скрипт, и тестовые бэкапы лежали в одной директории. В итоге перепутал условие удаления и после выполнения скрипт аккуратно удалил… сам себя. А это была единственная версия.
Переписывать всё с нуля совсем не хотелось, поэтому решил попробовать восстановление. Если файл небольшой и действовать сразу - шансы на успех вполне хорошие.
Есть утилита
scalpel, для файлового карвинга. Ставим:
apt install scalpel
Scalpel ищет файлы по сигнатурам. Для бинарников они обычно известны, а вот bash-скрипт - это обычный текст. Поэтому я добавил свою сигнатуру в
/etc/scalpel/scalpel.conf:
NONE y 2000 #!/usr/bin/env bash
#!/usr/bin/env bash - шебанг, с которого обычно начинаются скрипты. Этого достаточно, чтобы scalpel начал их искать.Создаем каталог для результата и запускаем сканирование:
mkdir /tmp/recover
scalpel /dev/mapper/vg0-root -o /tmp/recover
Указываем именно блочное устройство с файловой системой. Через несколько минут сканирования раздела ~60G в каталоге появилось множество восстановленных текстовых файлов.
Нужный скрипт оказался почти сразу, содержимое восстановилось полностью.
Вывод простой: если что-то удалили случайно - ничего не пишите на диск и сразу пробуйте восстановление.
#linux #recovery
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤3
Иногда после очередного обновления Windows внезапно ломается приложение, драйвер или какой-то системный функционал. В такой ситуации самый разумный шаг - удалить конфликтное обновление и не дать системе поставить его снова, пока Microsoft не выпустит исправление.
Есть два рабочих подхода: поставить обновления на паузу (до 35 дней) или скрыть конкретное обновление, чтобы Windows Update его игнорировал.
Раньше Microsoft официально распространяла графическую утилиту
wushowhide.diagcab, которая позволяет скрывать и возвращать отдельные обновления. Сейчас страница KB3073930 удалена, но сам файл все еще можно найти и использовать.После запуска утилита показывает список доступных обновлений, достаточно выбрать проблемное и скрыть его. Windows Update перестанет его предлагать.
Посмотреть список доступных обновлений:
Get-WindowsUpdate
Скрыть конкретное обновление по номеру KB:
Hide-WindowsUpdate -KBArticleID KB5029244
С драйверами чуть сложнее: у них часто нет привычного KB-номера. Сначала получаем их идентификаторы:
$updates = Get-WindowsUpdate -WindowsUpdate -UpdateType Driver
$updates | Select Title, Description -Expand Identity
После этого скрываем нужный драйвер по его ID:
Hide-WindowsUpdate -UpdateID "a1c4d2f8-7e91-4f0b-9e3a-8c2b7e9d1234"
В итоге система продолжит получать остальные обновления, но проблемное больше не всплывет. Удобный способ переждать баги без полного отключения Windows Update.
#windows #update
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤3