Несколько решена проблема с доступом ssh/scp из под Windows. Cофтина позволяет монтировать ssh как логический том (sshfs). С её помощью может получиться неплохое решение для удалённых бэкапов из Windows под любые никсы. Жаль, что пока нет решения под Windows 8 и серверную 2012.
Рубрика: Uncategorized
Удаление очень больших директорий в Linux
Современные файловые системы вроде ext3/ext4, xfs
позволяют создавать в директориях очень большое количество файлов. В ряде случаев (обычно по ошибке или недосмотру) это реализуется на практике и тогда некоторые операции с такой директорией становятся очень медленными. Это касается прежде всего операций, требующих сортировку списка содержимого директории. Такая сортировка, например, происходит при вызове листинга ls
, который по умолчанию сортируется, что естественным образом приводит к очень медленному исполнению команды. Также, большая директория очень медленно удаляется rm
, поскольку последний формирует листинг.
Чтобы ускорить (а иногда и просто осуществить) удаление большой директории нужно отключить сортировку. Команда rm при удалении берет полностью список файлов, поэтому удалять очень большую директорию "в лоб" с помощью "rm -rf" очень неоптимальный вариант. Большую директорию удобнее удалять частями: листингом без сортировки некоторого количества файлов и их удалением. Сортировка в ls отключается параметром -U
, что приводит к такой команде частичного удаления
ls -UA -1 . | head -n 1000 | xargs rm -f
Чтобы удалить содержимое директории полностью и при этом не грузить IO хоста постоянно лучше поставить команду в цикл с небольшими перерывами. Простейший (но не оптимальный и не самый корректный) способ осуществить это
while [ true ]; do ls -UA -1 . | head -n 100 | xargs rm -f 2>/dev/null; sleep 1; done
Альтернативный способ — изменить ionice
процесса удаления.
Быстрый способ посмотреть релиз Linux
Наипростейший способ посмотреть информацию о ядре Linux и некоторую информацию о системе это команда uname
:
$ uname -a Linux sonne 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt2-1 (2014-12-08) x86_64 GNU/Linux
Более подробную информацию о системе можно насобирать в /etc
. При этом краткая информация о релизе содержится в файле, который в разных дистрибутивах Linux называется по разному: lsb-release
, redhat-release
, os-release
, centos-release
, system-release
. Поскольку файл везде оканчивается на -release
, то можно не помнить всё это и получать информацию одной командой
cat /etc/*-release
Запуск крона чаще раза в минуту
Наибольшая частота, с которой cron
запускается — 1 минута. При администровании серверов бывают ситуации, когда требуется более частый вызов, но конфиг crontab
не позволяет этого сделать. Задача решается окольным способом, с помощью вызова нескольких инструкций и использования sleep
. Например:
* * * * * /usr/bin/python /usr/local/bin/doit.py * * * * * sleep 30; /usr/bin/python /usr/local/bin/doit.py
То же можно сделать и в одной строчке, если одну инструкцию исполнять за другой
* * * * * /usr/bin/python /usr/local/bin/doit.py; sleep 30; /usr/bin/python /usr/local/bin/doit.py
Также, можно контролировать возвращаемый инструкцией код и уменьшить количество исполнений в случае ошибки в скрипте. В этом случае точка с запятой меняется на &&
.
Win7 RDP multiuser
Не работает удаленный рабочий стол на несколько пользователей после обновлений ноября 2014?
Сносим обновления KB2984972, KB3003743. После этого терминал снова отлично работает.
Зеркалирование TCP порта с помощью iptables
В ряде задач системного администрирования требуется зеркалировать один tcp-порт на другой. Типичный пример: закрытый почтовый smtp порт 25 у некоторых провайдеров. В этом случае удобно смапить один порт на другой порт того же сервера, чтобы почту можно было отсылать по обоим портам. С помощью iptables
это легко реализуется
$IPTABLES -A FORWARD -p tcp --dport 2025 -j ACCEPT $IPTABLES -t nat -A PREROUTING -p tcp -d $WAN_IPADDR --dport 2025 -j REDIRECT --to-ports 25
Или альтернативный вариант указать интерфейс:
$IPTABLES -A FORWARD -p tcp --dport 2025 -j ACCEPT $IPTABLES -t nat -A PREROUTING -p tcp -i $WAN_DEV --dport 2025 -j REDIRECT --to-ports 25
После этого подключаться можно по обоим портам.
Собственные демоны в Linux с supervisor
Иногда возникает задача запускать некоторые процессы как демоны (daemons) и затем управлять их работой. Естественно, управление демоном лучше оформить со стандартным интерфейсом, т.е. похожим на известные
/etc/init.d/somedaemon {start|stop|restart|reload}
или более новомодно
service somedaemon {start|stop|restart|reload}
Чтобы не писать "велосипеды", можно воспользоваться supervisor
. По сути он предоставляет инфраструктуру для управления демонами с логикой сходной с init.d
-скриптами. Утилита отлично находится и ставится из репозитариев, конфиги к ней очень простые.
Разный вывод di и df в Linux
Интересные дела…
user@server:~$ di Filesystem Mount Size Used Avail %Used fs Type /dev/md0 / 1.9G 0.4G 1.4G 26% ext4 udev /dev 5.9G 0.0G 5.9G 0% tmpfs tmpfs /dev/shm 5.9G 0.0G 5.9G 0% tmpfs tmpfs /lib/init/rw 5.9G 0.0G 5.9G 0% tmpfs /dev/shm /run/shm 5.9G 0.0G 5.9G 0% none /dev/md1 /usr 9.4G 0.8G 8.1G 14% ext4 /dev/md3 /var 1.8T 0.1T 1.6T 11% ext4 user@server:~$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/md0 1966404 416816 1449700 23% / tmpfs 6163396 0 6163396 0% /lib/init/rw udev 6157924 228 6157696 1% /dev tmpfs 6163396 4 6163392 1% /dev/shm /dev/md1 9842136 833200 8508972 9% /usr /dev/md3 1899242804 108050616 1694716184 6% /var
phpmyadmin за SSL-фронтендом nginx
Администрировать БД MySQL
часто бывает удобно с помощью phpmyadmin
. Естественно, пользоваться им необходимо безопасно, т.е. через https
.
Простой вариант решения заключается в указании явного URL для пхпмайадмина в его конфиге:
$cfg['PmaAbsoluteUri'] = 'https://admin.example.com/pma';
Это полностью рабочий и безопасный для других сайтов вариант, но требует правки конфига phpmyadmin
.
Альтернативный вариант — передавать порт, по которому идет соединение на nginx
front-end от пользователя. Для этого в стандартных настройках прокси для энжикса меняем
proxy_set_header Host $host;
на
proxy_set_header Host $host:$server_port;
Однако, последний способ выдает некоторые глюки на другом коде, который исполняется на том же домене.
Восстановление RAID 10 массива
Поломался однажды RAID10 массив. Как обычно, все произошло внезапно: однажды перезапустили сервер, и получили "(что-то там) … not found". С поврежденным (degraded) массивом сервер стартовать отказался. Массив работал на полусофтовом-полухардварном псевдоконтроллере материнской платы Intel. Физически все жесткие диски оказались здоровыми, хотя для нижеописанного это не критично.
Далее следует описание восстановления информации с массива из серии "с помощью швейцарского перочинного ножа", т.е. без применения изощрённых средств восстановления. Если конкретно, понадобится компьютер с любым *nix и интерпретатором python3. Можно, конечно, воспользоваться программами вроде R-Studio, однако, по-моему это слишком простая задача для них.
Итак, делаем следующее. Открываем в бинарном редакторе все 3 диска и выбираем из них пару striped дисков, т.е. на которых чередующимися блоками составляют весь массив (как RAID 0). Делаем образы обоих жестких дисков в файлы с помощью замечательной утилиты dd
по типу
dd if=/dev/sdX of=/tmp/vY.hdd bs=32M
В итоге получаем два больших файла v0.hdd, v1.hdd. С самими HDD далее не работаем.
Снова открываем с помощью бинарного редактора какой-нибудь из образов и определяем размер stripe-элемента (chunk size). Сделать это не сложно даже "невооружённым взглядом": ищется несколько этих кусков с чёткими границами. Легче всего это сделать на файле с вразумительным содержимом, или даже на любом — если свободное место (почти) заполнено нулями. В нашем случае размер stripe оказался 64K. При этом на одном из образов в начальном секторе сразу обнаружился MBR, а во втором нечто совсем не похожее на MBR. Так стал понятен порядок stripe от разных дисков.
Осталось почти ничего: брать поочередно chunks куски с разных дисков, складывать их последовательно и получить образ всего массива. Пишем для этого элементарный скрипт на питоне:
#!/usr/bin/python3 """RAID0 recovery utility.""" dev0 = '/tmp/v1.hdd' dev1 = '/tmp/v0.hdd' DEV_OUT = '/tmp/out.hdd' # stripe 64k STRIPE = 64 * 1024 MAX_COUNT = 500 * 2**29 // STRIPE MAX COUNT if __name__ == '__main__': f0 = open(dev0, 'rb') f1 = open(dev1, 'rb') f_out = open(DEV_OUT, 'wb') offset = 0 while offset < MAX_COUNT: d0 = f0.read(STRIPE) d1 = f1.read(STRIPE) if d0 and d1: f_out.write(d0) f_out.write(d1) offset += 1 else: print("One of input files are finished. Read: {0} blocks.".format(offset)) break f0.close() f1.close() f_out.close()
Запускаем скрипт, оставляем его на ~10 минут и на выходе получаем полный образ диска. Разделы из него успешно монтируются самостоятельно или могут быть (всем образом) записаны на физический HDD. Так, совсем несложно и без дорогого софта, можно восстановить запоротый RAID10-массив.
LXC контейнеры в Debian jessie
LXC представляет собой набор утилит для управления виртуализацией на уровне операционной системы. Технология основана на механизме cgroups
, которая позволяет создавать несколько Linux-окружений с собственным пространством процессов и сетевым стеком. Все контейнеры работают на одном ядре вместе с основной машиной, что делает виртуализацию этого типа очень эффективной. По этой причине виртуализация такого типа — отличный выбор для различных применений, где не требуется устанавливать дополнительные модули к ядру и подобная специфика.
Почти всю полезную информацию можно найти в дебиановском источнике. Ниже — наиболее короткий howto, как быстро настроить lxc-виртуализацию под Debian Linux.
Настройка хост-машины
Начинаем как обычно с установки необходимого софта
apt-get install lxc bridge-utils libvirt-bin debootstrap
Контейнеры будем создавать в стандартной директории /var/lib/lxc
. Для удобства сделаем симлинк в корне файловой системы на эту директорию:
ln -s /var/lib/lxc
Настроим сеть. Для этого доустанавливается пакет bridge-utils
, типовой конфиг сети (/etc/network/interfaces
) будет следующим
auto lo iface lo inet loopback auto br0 iface br0 inet static address 123.123.123.3 netmask 255.255.255.248 gateway 123.123.123.1 bridge_ports eth0 bridge_fd 0 bridge_maxwait 0 bridge_stp off dns-nameservers 8.8.8.8 8.8.4.4
Проверяем, всё ли в порядке с установкой
lxc-checkconfig
и если все нормально, то ставим туда первый контейнер
lxc-create -n myvm -t debian
В результате получаем виртуальную машину и root
-пароль к ней. Контейнер будет из stable
-дистрибутива (Wheezy
), однако его можно дообновить до testing
или изначально ставить testing
.
Настройка виртуальной машины
Конфиг виртуальной машины находится в /lxc/myvm/config
. Доводим его до вменяемого состояния, например такого
lxc.network.type = veth lxc.rootfs = /var/lib/lxc/myvm/rootfs # Common configuration lxc.include = /usr/share/lxc/config/debian.common.conf # Container specific configuration lxc.mount = /var/lib/lxc/myvm/fstab lxc.utsname = myvm lxc.arch = amd64 lxc.network.flags = up lxc.network.link = br0 lxc.network.hwaddr = 00:25:90:01:5e:22 lxc.start.auto = 1
Последний параметр отвечает за автозагрузку при запуске основной машины.
Перед запуском виртуалки также меняем сетевые настройки в /etc/network/interfaces
.
В новой системе только минимальный набор софта, который не включает в себя некоторые широкоизвестные и часто применяемые утилиты. Например, не получится сразу выполнить ping
, поскольку соответствующего ему пакета нет в системе. Доустанавливаем необходимый софт:
apt-get install apt-utils iputils-ping cron rsyslog iptables
Иногда будем получать ругань вроде
perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LC_CTYPE = "ru_RU.UTF-8", LC_COLLATE = "ru_RU.UTF-8", LC_MESSAGES = "C", LC_NUMERIC = "POSIX", LANG = (unset) are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory
Поэтому сразу конфигурируем локаль
dpkg-reconfigure locales
Стандартного почтового агента (MTA) в системе тоже нет, поэтому ставим его и настраиваем:
apt-get install exim4 dpkg-reconfigure exim4-config
Полезные команды для управления
Запустить и погасить виртуальную машину используются
lxc-start -n myvm -d lxc-stop -n myvm
Параметр -d
в случае старта означает запуск в режиме демона. Если его не указать, то getty
захватит текущую консоль (что бывает полезно, если не удаётся подключиться по SSH).
Получить краткую информацию о статусе машины можно с помощью
lxc-info -n myvm
Заключение
Вышеприведенная конфигурация — очень быстрый способ поставить виртуальную машину, например для целей тестирования ПО. Если требуется даже базовая безопасность, необходимо много чего доработать.
PS
Статья устарела. Более качественный способ приведён в дебиановском мануале. И, что важно, постоянно обновляется.
Минимум в настройке почтовых серверов и рассылок
Часто бывает настроят сервер или полухостинг так, что веб работает, а почта отсылается не всегда. Такое же нередко можно наблюдать даже на достаточно крупных корпоративных почтовых серверах. Для минимально технически корректного использования нужно не так много сделать. А именно:
- Убедитесь, что ваш почтовый сервер не open relay, т.е. не рассылает сообщения от неавторизованных пользователей. Проверьте сконфигурированный почтовый сервер на open relay в нескольких легко находимых в поисковиках сервисах.
- В соответствии с RFC настройте обратный DNS (rDNS) для IP-адреса сервера и убедитесь, что возвращаемое доменное корректно разрешается и его A-запись — IP-адрес сервера. Иными словами доменное имя должно разрешаться в IP-адрес сервера, а IP-адрес — обратно разрешаться в то же доменное имя (FQDN). Именно это доменное имя должно возвращаться сервером в
HELO/EHLO
. - Настройте цифровую подпись DKIM. Её использование защитит вас от несанкционированной рассылки почты от вашего домена с серверов третьих лиц. По этой причине популярные почтовые сервисы используют её наличие при вычислении "спамовости" письма. После настройки DKIM, подпись следует проверить: в заголовках отосланных писем на серверах, проверяющих подпись, должна присутствовать запись
dkim=pass
. - Используйте антиспам и антивирусное ПО. В том числе и на исходящую почту. Если используете
postfix
, то на его сайте опубликован список поддерживаемого софта. - Настройте SPF. Целесообразность использования этой технологии иногда ставится под вопрос, поскольку она имеет недостаток: форвард с непрописанных серверов приведет к fail-результату по SPF. DKIM в этом смысле существенно более совершенная технология и в целом делает ненужным SPF. Тем не менее, в существующих реалиях её лучше использовать. Проверка, как и в случае с DKIM проста: в исходнике принятых с сервера писем должен быть результат
spf=pass
. SPF также имеет смысл включать на "непочтовых" доменах в виде"v=spf1 -all"
для предотвращения отправки спама от этого домена. - Проверьте, что IP-адрес сервера не находится в черных списках, например этим тестом.
В случае почтовых рассылок обязательно необходимо проверить валидность заголовков письма. Например, если сообщение формируется как MIME multipart
, убедитесь в правильном использовании Content-type
для различных частей письма.
Debian hostname
Правильно настроенный хост должен возвращать следующие имена hostname:
- короткое имя по
hostname
- FQDN по
hostname -f
- доменное имя по
hostname -d
Ключи естественным образом взяты из мануала и результат этих команд — простой тест на правильную конфигурацию хостнейма. От корректности настройки зависит работа многих приложений на сервере, веба, почты и т.п.
Иногда на принимаемых серверах hostname настроен некорректно. Правится ситуация несложным образом:
- Проверяем, что в
/etc/hostname
прописано короткое имя. Если нет, то прописываем. - Проверяем, что в
/etc/hosts
первым доменом на ip-адрес сервера прописан FQDN и если нет, то прописываем.1.2.3.4 somehost.prod.example.com somehost somehost.prod
После изменений перегружаем сервер для проверки, что весь софт правильно работает с загрузки сервера.
Дополнение:
Неправильный hosts, а точнее не-FQDN на первом месте после ip-адреса сервера приводит к ошибке apache2:
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using XXX.XXX.XXX.XXX. Set the 'ServerName' directive globally to suppress this message
Установка sphinx-плагина для memcached в Debian
Многие плагины к сфинксу в дебиане можно найти и подключить с помощью
munin-node-configure --suggest munin-node-configure --shell
Однако, есть много стоковых плагинов в /urs/share/munin/plugins/
, которые не предлагаются и не включаются таким способом. В частности, плагин к memcached
подключается вручную. Ставится он коротко следующим образом.
Плагин требует перловскую библиотеку Cache::Memcached
, если её нет в системе — ставим:
apt-get install libcache-memcached-perl
Далее вручную идем в директорию с конфигами и подключаем плагин:
cd /etc/munin/plugins ln -s /usr/share/munin/plugins/memcached_ memcached_rates ln -s /usr/share/munin/plugins/memcached_ memcached_bytes ln -s /usr/share/munin/plugins/memcached_ memcached_counters
Что означают все показатели и как работает плагин можно посмотреть в самом perl
-скрипте /usr/share/munin/plugins/memcached_
.
Далее запускаем получившиеся симлинки и проверяем, что плагин работает. По окончании рестартуем munin-node
:
Полезные команды для работы с LSI raid массивами
Несколько ранее я уже писал о замене HDD в рейд-массивах контроллеров LSI с помощью оригинальной утилиты MegaCLI
. Список полезных команд этой утилиты намного шире, здесь я сохраню наиболее полезные из них.
В командах используются следующие параметры:
- Адаптер: -aN. На сервере может быть установлено несколько физических RAID-контроллеров, номер нужного указывается параметром
-a
. Обычно установлен только один контроллер, для этого случая будет стандартный параметр-a0
. ЗначениемALL
можно указать сразу все доступные контроллеры. - Логический (виртуальный) диск: -Lx. Вместо x идет номер диска (начиная с 0). Также, допустимо значение
ALL
, выбирающий все доступные диски контроллера. - Физический диск: -PhysDrv [E:S]. E (Enclosure) — это номер корзины, S (slot) — номер слота начиная с 0.
Информация о контроллерах, логических и виртуальных дисках
Информация о корзинах (Enclousure) на всех контроллерах:
./MegaCli64 -EncInfo -aALL
Просмотр всех настроек контроллера 0:
./MegaCli64 -AdpAllInfo -a0 ./MegaCli64 -ShowSummary -a0 ./MegaCli64 -CfgDsply -a0
Получить состояние всех логических дисков:
./MegaCli64 -LDInfo -LALL -aALL
Информация о логических (виртуальных) дисках, т.е. собственно RAID-массивах:
./MegaCli64 -LDInfo -L0 -aALL
Информация о состоянии конкретного физического диска
./MegaCli64 -pdInfo -PhysDrv [4:11] aALL
Статус ребилда
./MegaCli64 -PDRbld -ShowProg -PhysDrv [4:11] -aALL
Логи контроллера
Одна из наиболее полезных комманд, когда ничего вроде не случилось, но что-то работает не так — просмотр логов. Это делается с помощью:
./MegaCli64 -AdpEventLog -GetSinceReboot -f events.log -aALL ./MegaCli64 -AdpEventLog -GetLatest 10 -f t1.log -aALL
Проверка прошивки
./MegaCli64 -PDList -aALL | grep Firmware
Диски горячей замены [hotspare]
Назначение диском горячей замены для определенного массива:
./MegaCli64 -PDHSP -Set -Dedicated -Array0 -PhysDrv[4:2] -a0
Назначить глобальным HotSpare-диском:
./MegaCli64 -PDHSP -Set -PhysDrv[252:2] -a0
Снятие статуса диска горячей замены:
./MegaCli64 -PDHSP -Rmv -PhysDrv[4:2] -a0
Назначение загрузочного массива
./MegaCli64 -AdpBootDrive -set -L0 -a0
Параметры HDD S.M.A.R.T.
Параметры SMART
можно получить с помощью стандартной линуксовой утилиты smartctl, если явно указать контроллер и id
диска. Заранее необходимо собрать id
исследуемых дисков, это параметр 'Device Id'
в списке физических дисков. Можно собрать и все доступные id
:
./MegaCli64 -PDList -a0 | grep 'Device Id'
Теперь для искомых дисков можно запрашивать смарт-параметры, например для id=5
:
smartctl -d sat+megaraid,5 -a /dev/sdb
locale failed in Debian
При установке в свежей ОС Debian новых пакетов обычно возникает ошибка вроде
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "en_US:en",
LC_ALL = (unset),
LC_CTYPE = "ru_RU.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Для исправления нужно подключить локали, хватает русской и английской utf-8. Для этого:
dpkg-reconfigure locales
И там выбираем соответствующие en_US.UTF-8
и ru_RU.UTF-8
.
Расширение LSI raid массива
Как и в случае замены проверяем диски:
./MegaCli64 -pdInfo -PhysDrv \[4:4\] -a0 ./MegaCli64 -pdInfo -PhysDrv \[4:15\] -a0
Добавляем диски в массив:
./MegaCli64 -LDRecon -Start -r6 -Add -PhysDrv[4:4,4:15] -l2 -a0
После можно смотрим статус массива и процент завершения:
./MegaCli64 -LDInfo -LAll -aAll
Полезные твики bash
В этой статье наиболее полезные способы быстрой и продуктивной работы с коммандной строкой bash. Предполагается, что читатель уже несколько знаком с коммандной строкой, поэтому совсем тривиальных вещей, вроде использования Tab
для автодополнения, здесь нет. В комментарии приветствуются другие полезные "твики" bash
.
Алиасы
Листинги
alias ll='ls -l' alias l='ls -lA'
Часто эти опции уже включены в .bashrc
, но закомментированы. В Debian
, например, в конфиге это реализовано так
# export LS_OPTIONS='--color=auto' # eval "`dircolors`" # alias ls='ls $LS_OPTIONS' # alias ll='ls $LS_OPTIONS -l' # alias l='ls $LS_OPTIONS -lA'
Остается раскомментировать нужные строчки. При этом в нагрузку получаем цветовую подсветку директорий.
Часто используемая команда по поиску процесса с определенным именем:
alias pg='ps aux | grep '
Просмотр наибольших файлов/директорий в гигабайтах и мегабайтах соответственно:
alias dug='du -h | grep ^[0-9.]*G | sort -rn' alias dum='du -h | grep ^[0-9.]*M | sort -rn'
Полезности для скриптов
Иногда бывает полезным поймать сигналы, посылаемые ОС скрипту. Например, при нажатии Ctrl-C
.
trap control_c SIGINT trap control_c SIGTERM
Часто используемые команды
Часто бывает необходимо найти файл, в котором имеется определённая подстрока. Сделать это можно с помощью стандарной утилиты grep
командой:
grep -rl
Горячие клавиши bash
Ctrl+w
— удаляет слово перед курсором в строке,Ctrl+u
— удаляет все символы до начала строки,Ctrl+k
— удаляет все символы до конца строки,Ctrl+y
— вставляет удалённые вышеуказанными сочетаниями символы,Ctrl+r
— производит обратный поиск по истории команд,Ctrl+l
— очищает экран,Ctrl+z
— останавливает исполнение текущей команды (продолжить можно с помощьюbg
илиfg
),Ctrl+d
— выход из сессии.
История команд bash
В администрировании Linux (да и UNIX тоже) очень удобно пользоваться командами из истории. Содержание истории просматривается с помощью вызова history
. Команду из истории можно выполнить по её номеру в списке например так:
history | less !45
При этом последняя команда вызывается более просто, без указания номера выполнением !!
.
Обратный поиск по истории команд вызывается с помощью Ctrl+R
, например:
(reverse-i-search)`smart': smartctl -x /dev/sdd | less
Взять аргументы из одной из предыдущих команд можно сочетанием Alt+.
.
По умолчанию длина истории небольшая и если нет повышенных требований к безопасности её можно несколько увеличить добавлением в .bashrc
строки:
export HISTFILESIZE=5000
Длинная история несколько понижает безопасность системы, особенно если в неё попадают всякие "интересные" команды. Поэтому, на критичных системах размер истории большой делать не стоит. Сбросить историю можно
history -c
Избежать добавления команды в историю можно начав её с пробела. Тогда исполненная инструкция в историю не попадает.
Замена диска в LSI raid-массиве
Время от времени жесткие диски выходят из строя и их необходимо менять. Далее описывается алгоритм такой замены на контроллере LSI MegaRaid SAS9260-4I с помощью оригинальной от производителя утилиты MegaCli
.
Жесткие диски в экспандере пронумерованы по снизу вверх, справа налево (по столбцам, т.е. первый столбец снизу вверх идут диски 0-1-2-3 и т.д.). Будем менять 15 сыплющийся диск на исправный 10 в рабочем и здоровом RAID6-массиве. Состояние SMART 15-го диска можно посмотреть командой:
smartctl -d sat+megaraid,15 -a /dev/sdc
Для заменяемого диска находим счетчик перемещенных секторов Reallocated_Sector_Ct далеким от нулевого значения, что означает, что с диском не все в порядке. Информацию об ошибках носителя также можно обнаружить и в состоянии физического диска контроллера:
./MegaCli64 -pdInfo -PhysDrv \[4:15\] -a0
,
где Media Error Count отличен от нуля. 15 в этой команде — id диска на экспандере.
Все работы проводим на исправном массиве. Проверяем, что массив здоров (Optimal):
./MegaCli64 -LDInfo -LAll -aAll | less
Отключаем и вынимаем дефектный жесткий диск:
./MegaCli64 -PDOffline -PhysDrv \[4:15\] -a0 ./MegaCli64 -PDPrpRmv -PhysDrv \[4:15\] -a0 ./MegaCli64 -PDMarkMissing -PhysDrv \[4:15\] -a0
С помощью -LDInfo -LAll
убеждаемся, что нарушен искомый массив и с помощью ./MegaCli64 -pdInfo -PhysDrv \[4:15\] -a0
, что диск действительно вне массива.
Теперь необходимо добавить исправный 10-й диск взамен неисправного. Делается это с помощью команды
./MegaCli -PdReplaceMissing -PhysDrv [E:S] -ArrayN -rowN -aN
для которой нам потребуются номера Array и row. Эти числа берутся из вывода
./MegaCli64 -PdGetMissing -a0
Запускаем команду с нужными параметрами, она добавляет диск. Подтверждаем, что диск добавился корректно
./MegaCli64 -pdInfo -PhysDrv \[4:10\] -a0
и в выводимой информации присутствуют правильный номер Disc Group.
Заключительный шаг — запуск ребилда
./MegaCli64 -PdRbld -Start -PhysDrv \[4:10\] -a0
состояние которого можно посмотреть через некоторое время
./MegaCli64 -PdRbld -ShowProg -PhysDrv \[4:10\] -a0
Все вышеприведенное справедливо и для других контроллеров LSA аналогичных моделей. Кроме этого, утилита MegaCli
умеет ещё много чего полезного, что легко находится в гугле.
grub-install на raid1-массивы
Стандартный установщик Debian при установке на raid1-массив почему-то делает загрузочную запись только на первый носитель (обычно /dev/sda
). Если этот носитель через некоторое время сдохнет, то со второго система не загрузится. Для исправления этого бага после установки необходимо сделать что-то вроде grub-install /dev/sda
на второй носитель raid-массива.