# touch /forcefsck touch /var/forcefsck touch /usr/forcefsck touch /home/forcefsckПри следующей перезагрузке произойдут проверки. Другой вариант -- проверить, что в /etc/fstab для каждой ФС в последней колонке стоит цифра, отличная от нуля. Для корневой ФС -- единица, для остальных 2. После чего выполнить shutdown с ключом -F.
понедельник, 17 сентября 2012 г.
Запланировать проверку диска при перезагрузке
Чтобы запланировать проверку файловой системы при перезагрузке, надо в корне этой ФС создать пустой файл forcefsck.
Например:
четверг, 9 августа 2012 г.
Добавление второго ip-адреса без использования виртуальных интерфесов ( алиасов ) в Centos.
Как известно, со времен ядра 2.2 сетевая подсистема была полностью переписана. Т.е. уже долгое время пользователи систем с ядром Linux могут навешивать дополнительные ip-адреса на интерфейсы родными средствами без использования костылей в виде дополнительных виртуальных интерфейсов (некоторые называют их алиасами).
Ядро 2.2 вышло в 1999 году, поэтому странно видеть, что многие администраторы до сих пор используют архаичные ifconfig/route и создают виртуальные интерфейсы для добавления второго ip-адреса.
Под виртуальными интерфейсами я подразумеваю вот это: eth0:0, p1p5:1 и т.д.
Разницу в использовании net-tools (ifconfig/route) и iproute2 (утилита ip) хорошо описал Александр sash-kan с форума http://unixforum.org/index.php?showtopic=129712
Так как же добавить второй ip-адрес интерфейсу? Легко:
Смотрим текущее состояние интерфейса:Ядро 2.2 вышло в 1999 году, поэтому странно видеть, что многие администраторы до сих пор используют архаичные ifconfig/route и создают виртуальные интерфейсы для добавления второго ip-адреса.
Под виртуальными интерфейсами я подразумеваю вот это: eth0:0, p1p5:1 и т.д.
Разницу в использовании net-tools (ifconfig/route) и iproute2 (утилита ip) хорошо описал Александр sash-kan с форума http://unixforum.org/index.php?showtopic=129712
Так как же добавить второй ip-адрес интерфейсу? Легко:
# ip a s dev eth0 2: eth0:Добавим второй адресmtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:d7:f9:6d brd ff:ff:ff:ff:ff:ff inet 192.168.4.97/24 brd 192.168.4.255 scope global eth0 inet6 fe80::a00:27ff:fed7:f96d/64 scope link valid_lft forever preferred_lft forever
# ip a a 192.168.5.98/24 dev eth0Смотрим, что получилось:
# ip a s dev eth0 2: eth0:Два полноценных равнозначных адреса без использования костылей. Поскольку ifconfig не может даже "вообразить", что у интерфейса могут быть два (три, двадцать три) адреса, то вывод этой команды будет неполным.mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:d7:f9:6d brd ff:ff:ff:ff:ff:ff inet 192.168.4.97/24 brd 192.168.4.255 scope global eth0 inet 192.168.5.98/24 scope global eth0 inet6 fe80::a00:27ff:fed7:f96d/64 scope link valid_lft forever preferred_lft forever
# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 08:00:27:D7:F9:6D
inet addr:192.168.4.97 Bcast:192.168.4.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fed7:f96d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:327348 errors:0 dropped:0 overruns:0 frame:0
TX packets:488 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:24684863 (23.5 MiB) TX bytes:83192 (81.2 KiB)
Поэтому на linux-машинах про команды ifconfig / route следует незамедлительно забыть.Теперь нас интересует, как в Centos задавать второй ip-адрес автоматически, при перезагрузке. В интернете полно инструкций по Centos/RedHat/Fedora, но все они используют дополнительные виртуальные интерфейсы eth0:1. Это неправильно. Как сделать правильно, написано в документации к дистрибутиву, а именно в файле /usr/share/doc/initscripts-9.03.31/sysconfig.txt.
/etc/sysconfig/network-scripts/ifcfg-eth0:
DEVICE="eth0" BOOTPROTO="static" HWADDR="08:00:27:D7:F9:6D" NM_CONTROLLED="no" ONBOOT="yes" TYPE="Ethernet" UUID="27b04fd3-4291-426f-b3d7-a60c1f5f3e60" GATEWAY="192.168.4.1" IPADDR0="192.168.4.97" NETMASK0="255.255.255.0" IPADDR1="192.168.5.98" NETMASK1="255.255.255.0"
среда, 27 июня 2012 г.
Подсчет процессов
Встретил в книге одного "эксперта" по GNU/Linux следующий способ подсчета количества запущенных экземпляров определенного процесса:
Unix-way, не спорю.
Что тут не так?
За grep -v grep нужно руки отрывать.
Уж можно было сделать ps aux | grep http[d], старый трюк, чтоб строчка с самой командой grep не выводилась в результатах. Но и это костыль:
Давно известно, что на замену ps | grep есть pgrep. Ну а чтобы еще и посчитать, у pgrep есть опция -c.
Т.е. вызов четырех команд можно заменить одной:
Всё давно придумано за нас.
P.S. в той книге встречаются еще и конструкции типа cat | grep | awk или grep | sed. "Эксперт", что уж поделаешь.
ps aux | grep httpd | grep -v grep | wc -l
Unix-way, не спорю.
Что тут не так?
За grep -v grep нужно руки отрывать.
Уж можно было сделать ps aux | grep http[d], старый трюк, чтоб строчка с самой командой grep не выводилась в результатах. Но и это костыль:
Давно известно, что на замену ps | grep есть pgrep. Ну а чтобы еще и посчитать, у pgrep есть опция -c.
Т.е. вызов четырех команд можно заменить одной:
pgrep -fc httpd
Всё давно придумано за нас.
P.S. в той книге встречаются еще и конструкции типа cat | grep | awk или grep | sed. "Эксперт", что уж поделаешь.
среда, 20 июня 2012 г.
Узнать время модификации файла
Как узнать время последней модификации файла?
Не просто узнать, а еще и перевести в unixtime, и при этом с минимумом телодвижений:
А вообще,man stat
Не просто узнать, а еще и перевести в unixtime, и при этом с минимумом телодвижений:
stat -c "%Y" filename
А вообще,man stat
пятница, 15 июня 2012 г.
Быстрое развертывание хоста виртуализации на Centos+KVM+libvirt
KVM -- специальная прослойка-интерфейс для предоставления доступа виртуальным машинам к реальному железу. Требует обязательной поддержки аппаратной виртуализации в процессоре.
1. Ставим Centos 6 x86_64 в минимальной конфигурации. Я обычно ставлю с netinstall, убрав галочки со всех компонентов.
2. Устанавливаем собственно модули, эмулятор qemu и библиотеку libvirt, которая является оберткой для комфортного управления машинами.
3. В файле /etc/libvirt/libvirtd.conf находим и раскомментируем следующие опции (отключаем шифрование административного подключения, разрешаем входящие подключения по сети, режим аутентификации -- sasl):
4. Включаем "удаленный рабочий стол" по протоколу VNC. Там же можно включить протокол SPICE, если нужно. В файле /etc/libvirt/qemu.conf
5. Еще одно место, где нужно разрешить демону libvirtd принимать соединения. В файле /etc/sysconfig/libvirtd
6. Создать пользователя и задать ему пароль. Этот пользователь не имеет отношения ни к локальным unix-пользователям, ни к пользователям виртуальных машин. Это логин+пароль для подключения к libvird с другой машины. Дать команду:
7. Открыть в iptables подключения с админской машины (для VNC 5900/tcp, для libvirt 16509/tcp).
8. Запускаем.
9.Проверим работу локально.
На админскую машину ставим virt-manager и пробуем подключиться.
1. Ставим Centos 6 x86_64 в минимальной конфигурации. Я обычно ставлю с netinstall, убрав галочки со всех компонентов.
2. Устанавливаем собственно модули, эмулятор qemu и библиотеку libvirt, которая является оберткой для комфортного управления машинами.
yum install qemu-kvm libvirt
3. В файле /etc/libvirt/libvirtd.conf находим и раскомментируем следующие опции (отключаем шифрование административного подключения, разрешаем входящие подключения по сети, режим аутентификации -- sasl):
listen_tls = 0 listen_tcp = 1 mdns_adv = 0 auth_tcp = "sasl"
4. Включаем "удаленный рабочий стол" по протоколу VNC. Там же можно включить протокол SPICE, если нужно. В файле /etc/libvirt/qemu.conf
vnc_listen = "0.0.0.0" vnc_password = "pa55w0rd"
5. Еще одно место, где нужно разрешить демону libvirtd принимать соединения. В файле /etc/sysconfig/libvirtd
LIBVIRTD_ARGS="--listen"
6. Создать пользователя и задать ему пароль. Этот пользователь не имеет отношения ни к локальным unix-пользователям, ни к пользователям виртуальных машин. Это логин+пароль для подключения к libvird с другой машины. Дать команду:
saslpasswd2 -a libvirt username
7. Открыть в iptables подключения с админской машины (для VNC 5900/tcp, для libvirt 16509/tcp).
8. Запускаем.
service libvirtd start
9.Проверим работу локально.
virsh listЕсли ошибок нет, значит всё, сервер настроен верно.
На админскую машину ставим virt-manager и пробуем подключиться.
среда, 11 апреля 2012 г.
Грабли в скриптах Gentoo
Как известно, чтобы в gentoo сеть поднималась автоматом при загрузке системы, нужно создать символьную ссылку с net.lo на net.eth0 и добавить последний в boot или в default
Делал это много раз, а тут наступил на грабли. Итак, делаю ссылку:
# cd /etc/init.d # ln -s ./net.lo ./net.eth0 # rc-update add net.eth0 defaultДелаю по привычке:
# /etc/init.d/net.eth0 restart * WARNING: you are stopping a boot service * Caching service dependencies ... [ ok ] * Bringing down interface lo net.lo lo * Bringing up interface lo * 127.0.0.1/8 ... [ ok ] * Adding routes * 127.0.0.0/8 via 127.0.0.1 ...Какого лешего перезапускается net.lo? Почему net.eth0 даже не шевельнулся? Нагуглить ничего не удалось, пришлось ковыряться самостоятельно. Оказалось, что символьную ссылку нужно создавать правильно, а именно так:
# cd /etc/init.d # ln -s net.lo net.eth0Вот так. Всё дело в волшебных точках. На каком-то этапе скрипт net.lo, пытаясь определить имя интерфейса, удаляет своём названии всё до первой точки, наивно полагая, что всё оставшееся - и есть название интерфейса. Ну а если там получилось что-то непонятное, то по дефолту имя будет lo.
пятница, 16 марта 2012 г.
Перенос lvm тома
Перенос lvm тома
Появился новый жесткий диск, решил перенести на него всю систему.
Старый диск:
/dev/sdb1 - ext4, на нём корень
/dev/sdb2 - lvm, там /usr, /var, swap и шифрованный /home.
Все действия осуществляю, загрузившись с liveusb SystemRescueCD.
На новом диске создаю соответствующее разбиение.
Перенос раздела с ext4 (/dev/sdb1 -> /dev/sda1) делается просто:
# partclone -b -s /dev/sdb1 -O /dev/sda1Переходим к lvm. Форматируем раздел под lvm:
# pvcreate /dev/sda2Растягиваем имеющуюся группу томов на оба раздела (старый и новый), до запуска команды в vg1 только один раздел
# vgextend vg1 /dev/sda2Переносим непосредственно данные:
# pvmove /dev/sdb2 /dev/sda2Удаляем из группы vg1 старый том:
# vgreduce vg1 /dev/sdb2Готово. Только не забыть установить загрузчик на новый диск, и можно удалять старый.
Подписаться на:
Сообщения (Atom)