LINUX.ORG.RU

Сообщения shamus24

 

Загрузка с M.2 PCI-e

Здравствуйте. Не знаю уж, насколько это про линукс, но… В общем, купил я с полгода назад ноутбук DELL (модель не помню, нет под рукой) с диском M.2 SATA и убунтой, с которой и прожил эти полгода. Но я догадывался, что вторая операционка мне, рано или поздно, понадобится (не скажу какая :-) ), а, поскольку диск особенным объемом не блещет, надо для этой цели поставить ещё один. И тут получилась накладка. Я был уверен, то там есть куда поставить стандартный 2,5" SATA, но при вскрытии обнаружилось, что нет, некуда. И вообще больше слотов ни под какие диски там не обнаружены. Зато есть пустующий M.2 под WWAN длиной 42 мм. Понятное дело, что SATA там, скорее всего, нет, но PCI-e поставить можно, если найти его в подходящем размере. Вопрос в том, можно ли с него будет после этого загрузиться? В идеале хотелось бы иметь меню GRUB на основном диске, которое позволяло бы загрузиться либо с основного в Ubuntu, либо с дополнительного. Я правильно понимаю, что, хотя формально загрузочным диском будет выставлен штатный, как и сейчас, для возможности альтернативной ОС со второго диска этот диск всё равно должен быть доступен как загрузочный в Setup компьютера (хотя и не выбран загрузочным), иначе Grub его тоже не увидит, или операционка не загрузится? Какова вероятность, что Firmware компьютера не распознает диск, установленный в разъем для WWAN? Я почти не сомневаюсь в том, что диск будет виден после загрузки ОС (любой), но вот как обстоят дела насчет самого процесса загрузки?

 ,

shamus24 ()

Глушатся звуки во всех приложениях во время аудиозвонка

Здравствуйте. Безуспешно пытаюсь отучить skype (desktop) глушить все остальные звуки во время звонка. В анамнезе следующее: а). Pulseaudio volume control показывает наличие нескольких потоков (один из них сам skype), и, действительно, все заглушенные, кроме skype. б) Я могу там же включить любой поток вручную, и он начинает звучать. Но я не могу сохранить это. При следующем звонке всё опять глушится. в) Потоки, которые создаются уже во время звонка - тоже создаются уже заглушенными. То есть это не skype при установлении связи перебирает и глушит, это делает система, и следит за этим.

Ну и вопрос: как уговорить её этого не делать? Система: Ubuntu Bionic LTS

 , ,

shamus24 ()

nping: network unreachable считается удачным ответом

Всем привет. В своё время долго ржал над виндовым ping-ом, который сам себе отвечал, что «заданный узел недоступен», считая эти «ответы» как успешные, и выдавая статус успешной операции по итогу. Ну ладно, то винда. Но вот теперь обнаруживаю, что nping ушёл совсем недалеко:

# nping --interface eth0 --icmp --dest-mac 00:21:91:98:6A:75 -c 3 --delay 0.2 A.B.C.D

Starting Nping 0.7.60 ( https://nmap.org/nping ) at 2018-12-27 13:18 EET
SENT (0.8063s) ICMP [192.168.1.59 > A.B.C.D Echo request (type=8/code=0) id=12718 seq=1] IP [ttl=64 id=60290 iplen=28 ]
SENT (1.0068s) ICMP [192.168.1.59 > A.B.C.D Echo request (type=8/code=0) id=12718 seq=2] IP [ttl=64 id=60290 iplen=28 ]
RCVD (1.0081s) ICMP [192.168.1.1 > 192.168.1.59 Network A.B.C.D unreachable (type=3/code=0) ] IP [ttl=64 id=1646 iplen=56 ]
RCVD (1.0081s) ICMP [192.168.1.1 > 192.168.1.59 Network A.B.C.D unreachable (type=3/code=0) ] IP [ttl=64 id=1647 iplen=56 ]
SENT (1.2074s) ICMP [192.168.1.59 > A.B.C.D Echo request (type=8/code=0) id=12718 seq=3] IP [ttl=64 id=60290 iplen=28 ]
RCVD (1.2173s) ICMP [192.168.1.1 > 192.168.1.59 Network A.B.C.D unreachable (type=3/code=0) ] IP [ttl=64 id=1648 iplen=56 ]

Max rtt: 9.828ms | Min rtt: 1.287ms | Avg rtt: 4.219ms
Raw packets sent: 3 (126B) | Rcvd: 3 (168B) | Lost: 0 (0.00%)
Nping done: 1 IP address pinged in 1.22 seconds
Как видно, поведение почти то же самое, только он хоть не сам себе отвечает. О том, что заданная сеть недоступна, отвечает ему роутер, что, конечно, чистая правда. Но почему это считается успешным прохождением пакета? И, главное, как эту тварь заставить не считать успехом ответ от роутера о невозможности связаться с хостом?

Я его, на самом деле, использую с опцией -q, и анализирую только суммарный ответ: сколько пакетов потеряно. Какой-нибудь более вменяемый выход есть, кроме как анализировать весь вывод целиком и считать строчки с успешным ответом именно от целевого хоста?

Какой-нибудь другой ping подойдёт, только если у него есть аналог опции "--dest-mac", но я такого больше не знаю.

PS Я даже не говорю о том, что nping всегда возвращает success, и узнать результат пинга можно, только проанализировав его stdout. Это, конечно, жесть, но об этом, хотя бы, в документации написано.

 ,

shamus24 ()

Система высвапливает процессы, чтобы отдать память под буферы i/o

Fedora 27. Нужно скопировать много больших файлов (2ТБ) с USB-диска на внутренний. Внутренний зашифрован, поэтому запись происходит медленнее, чем чтение с внешнего (аппаратного шифрования нет). Разница «пишется» в буферы ввода-вывода. Через некоторое время ради этого система начинает вытеснять в свап рабочие процессы (а их много и нужных). Свап на отдельном диске, не участвующем в копировании, поэтому ему ничто не мешает. Ещё через время почти вся память занята буферами, и, соответственно, всё висит в мертвую. Гугление на предмет как ограничить размер буферов, чтобы оно стеснялось рабочие процессы в свап выдавливать, находит сплошной елей типа «это ничего, что буферы заняли всю память, ведь как только кто-нибудь попросит, оно сразу освободит». Да не вопрос, только никто не просит, потому что всё в свапе. Об этом почему-то все молчат. В качестве временного решения предлагается использовать nocache, но готового бинарника в пакетах нет, а собирать не сподручно. Зато я могу всю файловую систему смонтировать в "-o sync", благо, она отдельная. Скорость записи падает более чем в 10 раз, что делает затею бессмысленной. Подозреваю, что nocache даст примерно тот же эффект. В качестве временного решения отключил swap, хорошо, что памяти пока хватает. Пребывая в тихом шоке от того, что обыкновенной командой cp можно намертво завесить систему, ищу нормальное решение.

 , , ,

shamus24 ()

Обычный «+» и "-" на клавиатуре срабатывает как select/deselect

Здравствуйте. После какого-то обновления системы не могу в командной строке писать ключи. Попытка ввести "-" (или «+») с клавиатуры срабатывает как «серый -/+». Соответственно, эти символы удается ввести, только если «погасить» панели через ctrl-o. Раздражает ужасно. Проявляется как в сессии ssh с винды через putty, так и непосредственно на консоли.

Имею сейчас две машины, на одной есть этот эффект, на другой нет. И там, и там апгрейднутая до 26-й версии «Федора», но на «сбойной» обновления свежее. Версия mc идентичная: 4.8.19, настройки и локализация одинаковая LANG=«en_US.UTF-8», KEYMAP=«us», версии ncurses тоже идентичные.

Версии ядра такие: без бага: 4.12.12-300.fc26.x86_64 с багом: 4.12.13-300.fc26.x86_64

Понимаю, что ядро тут, скорее всего, ни при чем, но куда ещё смотреть, я не знаю. Вопрос: что делать?

 ,

shamus24 ()

Не интерактивный ssh в cron или zabbix

Потратил сегодня часа два на проблему, причем беглый поиск выдает, что проблема таки есть, но с решениями как-то не очень. В общем, если нужно запустить ssh-клиента из как-то хитро вызываемого не интерактивного скрипта, то можно столкнуться со следующим поведением: команда завершается успешно, показывает код выхода «0», но при этом не делает ничего полезного. Я столкнулся при написании хитрого User Parameter для Zabbix, но, говорят, в cron та же история. Если посмотреть отладочный вывод ssh, то там будет фигурировать что-то вроде такого:

debug2: channel 0: read<=0 rfd 4 len 0

debug2: channel 0: read failed
И последующее закрытие соединения. Происходит это, когда у ssh нет STDIN (то-ли перенаправлен из /dev/null, то-ли вообще закрыт), даже если читать оттуда ничего не предполагается.

Решение на поверхности: если команда не использует входящий поток, перенаправить его из /dev/zero:

ssh <host> "команда" </dev/zero

 

shamus24 ()

Fedora 25 - iptables SNAT пакеты исчезают

Столкнулся с очередным глюком, причём я почти уверен, что это именно глюк, т.к. работало раньше в этой же самой конфигурации. Суть: хочу с роутера пробросить на внутренний VPN-сервер входящие PPTP-соединения с использованием DNAT и SNAT. SNAT обязателен, т.к. для VPN-сервера этот роутер не всегда является шлюзом (он резервный), поэтому соединения на VPN должны приходить как-бы от внутреннего адреса роутера. Правила просты как по учебнику (GRE я опускаю, т.к. до него дело не доходит вообще):

iptables -t nat -A PREROUTING -i enp3s0 -p tcp --dport 1723 -j DNAT --to 192.168.1.1
iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.1 --dport 1723 -j SNAT --to-source 192.168.1.52
192.168.1.1 - это VPN, а 192.168.1.52 - это роутер, что несколько необычно. enp3s0 - это, разумеется, внешний интерфейс роутера.

Так вот, пакеты благополучно приходят на внешний enp3s0, и пропадают в никуда, ни на одном интерфейсе больше не ловятся. Трассировка iptables -j TRACE показывает, что последним для пакетов выполняется этот SNAT, после этого глухо. Если убрать SNAT, то пакеты благополучно доходят до VPN, но, естественно, не «возвращаются», т.к. у него шлюз другой.

Вопрос: чо делать?

PS: «Обернул» правило SNAT в два правила -j LOG, одно перед SNAT, другое после. То, что перед SNAT, пишет в лог, то, что после него - не пишет. Т.е. на правиле SNAT пакет тупо пропадает.

 ,

shamus24 ()

Можно ли клонировать процесс

Здрасьте. А можно ли как-то в линуксе «клонировать» запущенный процесс, и имеет ли это смысл? Поиск по документации и интернету прогнозируемо отсылает к функциям fork() и clone(), но это не совсем то. Я хочу не написать программу, которая будет уметь себя клонировать, а скопировать уже запущенный и выполняющийся процесс, который, вероятно, такого сам по себе не умеет. Принципиальный вопрос: даже если это удастся сделать, будет ли «клон» в принципе жизнеспособен? Допустим, никаких файлов или сетевых соединений у него в момент клонирования не открыто, но как поведут себя хотя-бы стандартные stdin/stdout/stderr? Ну и в принципе - возможно ли это, и как?

Пару слов зачем это. Давно у меня витает одна идея о том, как правильно делать бэкапы с запущенных виртуальных машин qemu-kvm. Все нынешние методы основываются на том, чтобы в нужный момент времени снять и сбэкапить снапшоты с дисков этой машины. Таким образом можно получить crash-consistent backup, т.е. как будто из физической машины дёрнули питание, и потом (в другой машине) сделали бэкап дисков, в надежде на то, что журналируемые файловые системы и транзакционные базы данных сами обеспечат целостность данных при таком форс-мажоре. Другой подход - сделать «снимок» работающей виртуальной машины, вместе с памятью и состоянием процессора, и потом это всё забэкапить. Здесь основной минус - процедура прерывает выполнение машины на довольно существенное время, к тому же добавляет к бэкапу содержимое памяти (а её может быть много). Хочется попробовать реализовать идею shutdown-consistent backup. То есть как если бы мы в произвольный момент времени нажали кнопку питания ACPI, дождались завершения работы машины, а потом сбэкапили её диски. Примерный алгоритм следующий: 1) поставить виртуальную машину на паузу (да, без этого никак, вопрос только в длительности); 2) сделать снимки всех дисков этой машины; 3) сделать клон процесса этой машины; 4) запустить виртуальную машину (исходный процесс) обратно. Как видим, даунтайм минимальный. Снимки дисков, если всё сделано правильно, делаются быстро (LVM, ZFS). Вопрос в третьем пункте. Если это тоже сделать правильно, как, например, делает fork(), то, даже при большом объеме выделенной для машины памяти клонирование процесса не займет много времени, т.к. копирования содержимого страниц при этом не происходит, они только помечаются как shared, и потом «делятся» между процессами с помощью механизма copy-on-write. Далее «правильный» бэкап снимаем уже с клона примерно так: 5) подменяем клону диски на их созданные только что снимки (не очень тривиально, но делается); 6) изолируем клон от сети и других устройств; 7) запускаем клон и через ACPI посылаем ему сигнал shutdown; 8) когда выключится, бэкапим диски. Вот такой вот ужас. Как вы думаете, реально?

 , ,

shamus24 ()

zabbix значение элемента типа text ограничено 64КБ

Вот, столкнулся с нежданчиком. Несмотря на то, что в документации прямым текстом написано:

User parameters are commands executed by Zabbix agent. Up to 512KB of data can be returned.

(zabbix версия 3.0)

реально в элемент данных помещается не более 64КБ, остальное обрезается без уведомления. Исследование показало, что для хранения в базе данных MySql использовано поле типа TEXT, которое как раз и ограничено размером 64КБ, и, хотя его легко изменить вручную на более вместительный тип данных, всё равно больше 64КБ в него не записывается. Агент при тестировании через zabbix_agentd -t <key> возвращает полное значение, значит проблема на стороне сервера, или где-то в коммуникации между ними.

Решения, собственно, никакого не жду, просто наблюдение.

 

shamus24 ()

nscd слишком долго держит запись в кэше

Привет, друзья.

Есть некая единственная машина с установленным nscd (остальные без него). И есть некий хост на динамическом IP-адресе с динамическим DNS. Так вот эта машина с nscd слишком уж долго «раздупляется» при смене IP-адреса на динамическом хосте. Остальные подхватывают живо, а эта может тупить буквально часами.

Начал изучать вопрос, и не могу понять, какой именно service из файла nscd.conf отвечает за кеширование GetHostByName и подобных запросов. Видимо, hosts, поскольку все остальные подходят ещё меньше (хотя внятно это не указано, и создаётся впечатление, что он только файл hosts кеширует). Но у меня про этот сервайс написано следующее:

enable-cache            hosts           yes
positive-time-to-live   hosts           10
negative-time-to-live   hosts           5
То есть всего 10 и 5 секунд соответственно. Почему же он кэширует на часы? Или это всё же не та настройка? Для passwd и group там существенно более длительные периоды указаны. Или какая-то другая причина есть? Сложность в том, что адрес меняется довольно редко, и я не всегда могу посмотреть что там происходит именно в этот момент. Можно его вообще выключить - не критичен, но хотелось бы понять что не так.

PS на той машине следующее: Debian GNU/Linux 7, nscd (Debian EGLIBC 2.13-38) 2.13

 ,

shamus24 ()

drbd primary/secondary Inconsistent/UpToDate

Иногда при экспериментах с drbd наблюдаю такое вот состояние:

cs:SyncTarget ro:Primary/Secondary ds:Inconsistent/UpToDate
Не могу понять, это баг, или оно действительно так умеет? Получается путём подачи самой обычной команды drbdadm primary res во время синхронизации. В большинстве случаев оно честно сообщает, что для primary надо бы UpToDate иметь на этом хосте. Но иногда эта команда выполняется, и получается сабж. Если это не баг, то как бы устойчиво получить такой результат, а не очень иногда? Ну а если баг - значит баг, и, как я понимаю, устройством лучше до окончания синхронизации не пользоваться. В принципе оно же умеет Primary/Diskless, так что ничего сверхъестественного в Primary/Inconsistent нет, но почему через раз работает?

 

shamus24 ()

Postfix привязать к интерфейсу

Здравствуйте. Может и глупо выглядит, но это уже просто крик души. Ну почему какие-то сложные вещи сделаны и работают, а то, что «на поверхности» - тщательно игнорируется, или глубоко спрятано? Postfix - почтовый сервер, который принимает почту через TCP порт 25 (образно), и, как ни странно, отправляет её. Так вот я хочу, чтобы он на приём слушал только определенный интерфейс, а отправлял - как стэк «скажет». Например, хочу, чтобы «слушал» он во внутренней сети, а отправлять мог и внутрь, и наружу. Только если я указываю параметр smtp_bind_address или inet_interfaces, то он пытается и слушать, и отправлять только и исключительно через указанный интерфейс или адрес. Закрыть интерфейс через iptables не предлагать. Смысл в том, что я хочу, чтобы внешний интерфейс слушал другой postfix instance, который бы принимал почту извне (возможно, ничего никуда не отправляя при этом, но не факт)

 

shamus24 ()

ip rule на роутере с NAT

Привет, коллеги. Почему-то не срабатывает правило ip rule, если пакет предварительно обработан NAT-маскарадингом (на этом же компьютере). Что хотелось бы получить: принимать входящие на 192.168.8.252:2023 и 192.168.8.254:2023; DNAT-ить их во внутреннюю сеть на 10.0.0.241. Фишка в том, что 192.168.8.10 и 192.168.8.12, с которых приходят входящие - это тоже роутеры, они тоже DNAT-ят снаружи. 192.168.8.10 перенаправляет на 192.168.8.254, а 192.168.8.12 - на 192.168.8.252. Ответ, естественно, должен уходить на тот же роутер, с которого пришёл запрос. Вот что написано в правилах:

# ip rule show
0:      from all lookup local
32762:  from 192.168.8.252 lookup 3
32763:  from 192.168.8.254 lookup 1
32766:  from all lookup main
32767:  from all lookup default

# ip route show table 3
default via 192.168.8.12 dev br0

# ip route show table 1
default via 192.168.8.10 dev br0

# ip route show table main
default via 192.168.8.10 dev br0  src 192.168.8.254
В IPTABLES всё просто:
*nat
-A PREROUTING -p tcp -d 192.168.8.252 --dport 2023 -j DNAT --to 10.0.0.241

-A POSTROUTING -o br0 -j MASQUERADE
И вот что получается:
# tcpdump -enni br0 port 2023
12:15:25.821772 b8:a3:86:65:a3:0f > 00:1e:8c:8b:bc:aa, ethertype IPv4 (0x0800), length 66: 178.93.15.150.62250 > 192.168.8.252.2023: Flags [S], seq 4294154921, win 64240, options [mss 1260,nop,wscale 2,nop,nop,sackOK], length 0

12:15:25.822038 00:1e:8c:8b:bc:aa > b8:a3:86:65:a2:3d, ethertype IPv4 (0x0800), length 66: 192.168.8.252.2023 > 178.93.15.150.62250: Flags [S.], seq 2354228401, ack 4294154922, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 6], length 0

# arp -a
? (192.168.8.12) at b8:a3:86:65:a3:0f [ether] on br0
? (192.168.8.10) at b8:a3:86:65:a2:3d [ether] on br0
То есть, по MAC-адресам видно, что запрос приходит с b8:a3:86:65:a3:0f (192.168.8.12), а ответ на него отсылается на b8:a3:86:65:a2:3d (192.168.8.10), несмотря на правило «from 192.168.8.252 lookup 3», в котором указан маршрут «default via 192.168.8.12». Вместо него, видимо, используется маршрут из table main, несмотря на то, что там явно указано «src 192.168.8.254», что не совпадает с содержимым пакетов.

Интересно, что такого не проиходит с локальными портами, т.е. открытыми непосредственно на роутере, а не транслируемыми через DNAT внутрь сети. Там ответ чётко уходит на нужный роутер в зависимости от адреса, на который пришёл запрос.

Вопрос: чего я не понимаю в этой кухне? Я знаю ещё один способ - маркировать пакеты в iptables и правила писать в зависимости от метки fwmark, но описанный здесь способ мне кажется красивее и правильнее, хотелось бы довести его до конца.

 , ,

shamus24 ()

nginx можно ли скрыть имя индексного файла

Чтобы не пускаться в пространные объяснения, приведу пример: хочется, чтобы запрос «GET /» брал из соответствующего каталога файл, например, index.php, скармливал его интерпретатору и отдавал клиенту результат. Разумеется, это делается с помощью параметра «index index.php», здесь проблем нет. Но ещё хочется, чтобы «GET /index.php» при этом возвращал 404 или 403. Также должно работать и для запросов с параметрами, и не только в корне т.е. «GET /form/?param=value» должно работать, а «GET /form/index.php?param=value» - нет. Если это невозможно в лоб, тогда ещё один вопрос: а имеет ли возможность клиент на своей стороне «подсмотреть» имя индексного файла? То есть увидеть, что на его запрос «GET /» ему «отдали» файл /index.php ? Если такая информация нигде не передаётся, тогда можно решить вопрос присвоением индексному файлу «криптографического» имени, которое никто никогда в адресной строке не введёт.

 ,

shamus24 ()

from many sources to many destinations in one rule

Знатоки iptables, подскажите, можно ли как-то красиво записать условие «от нескольких источников до нескольких адресатов»? Разумеется, если все источники и все адресаты не укладываются в одну подсеть. А потом - то же самое, но в противоположном направлении. Чтобы было понятнее - хочу переписать вот такую конструкцию из FreeBSD ipfw:

allow ip from table(10) to table(20)
allow ip from table(20) to table(10)
В iptables как-то сложновато получается. Вижу способ создать два chain-а, в одном маркировать пакеты, потом по условию наличия маркировки направить в другой, а там уже делать ACCEPT. При этом для обратного направления потребуется ещё два chain-а, потому как действия разные, хотя адреса и одинаковые. Понятно, что всё равно в скрипте, но как-то очень не красиво. Есть ли способ красивее решить задачу?

 

shamus24 ()

KVM проброс последовательного порта в виртуалку не работает

Доброго времени суток. Вот, неожиданно наткнулся на проблему, второй день уж как безрезультатно. Задача простая - пробросить последовательный порт с мультипортовки в виртуалку. На хосте порт называется /dev/ttyS1, minicom его прекрасно видит, на нём модем (аппаратный), на команды отвечает. В конфиге libvirt пишу, соответственно:

    <serial type='dev'>
      <source path='/dev/ttyS1'/>
      <target port='0'/>
    </serial>
(сразу скажу, что цифра target port значения не имеет), и в виртуалке получаю болт - порт, конечно, есть, но стучаться в него - как в кирпичную стену. При этом, если его направить не в аппаратный последовательный порт, а в виртуальный терминал pty - тогда работает
    <serial type='pty'>
      <target port='0'/>
    </serial>
Если потом найти на хосте этот pty и подключиться тем же minicom-ом, то всё видно с обеих сторон.

Вопрос: это у меня руки или там есть какая-то тонкость, которую я не знаю?

В процессе ковыряния обнаружил следующее: в соответствии с man-ом от kvm-а проброс аппаратного порта должен бы осуществляться с помощью параметра "-serial /dev/ttyS1", на деле же libvirt генерирует нечто монстрообразное: "-chardev tty,id=charserial0,path=/dev/ttyS1 -device isa-serial,chardev=charserial0,id=serial0", может это и правильно, но как-то не задокументировано.

Если никаких других идей нет, подскажите, как можно сделать «перемычку» между тем же /dev/pty/X и /dev/ttyS1 на хосте? interceptty, вроде, должен такое уметь, но он монстрообразный, может что-то попроще есть? Пробросить целиком мультипортовку как PCI-устройство не предлагать.

shamus24 ()

Argument list too long - workaround?

Здравствуйте. Я опять с не стандартными вопросами, можно?

Что можно сделать, если некоторая программа на питоне (pcs) пытается вызвать другую программу (cibadmin), передав ей в качестве аргумента целый xml-файл (конфигурация кластера pacemaker/corosync), который разросся до 1,5 мегабайт, и вызывает указанную в заголовке ошибку?

Я не знаю, на кой ляд они сделали именно так, тем более, что вызываемая программа вполне может прочитать и файл, но это факт, на обнаружение которого у меня пару дней ушло (разумеется, оно про ошибку «argument list» нигде не пишет в выводе, а пишет какую-то ахинею, плюс на это наложилась другая ошибка там же, которая сбила с толку, но там хоть понятно что делать).

Можно что-нибудь изобразить, чтобы командная строка мегабайт до сорока пролазила? Или это только ядро компилировать? Переписывать pcs желания нет - он большой.

Fedora 19.

PS По интернету искал, но там все отчаянно борятся с удалением, копированием или перемещением большого количества файлов. Видеть уже не могу эти их xargs-ы и прочие find -exec-и.

 , ,

shamus24 ()

Много исходящих TCP-соединений (в секунду)

Здравствуйте. Есть web-сервер, работающий с mysql таким образом,что на каждый чих устанавливается соединение, что-то быстренько там делается, потом соединение разрывается (велосипед не мой). Соответственно, под нагрузкой число установки соединений в секунду с mysql достигает неразумных значений. Это приводило к известной проблеме, когда из-за закрытых, но висящих в состоянии TIME_WAIT, соединений заканчиваются локальные TCP порты, и соединения больше не открываются. Попытка уменьшить время ожидания по найденным в инете рекомендациям результата не дала (потом нашёл и почему), а вот установка параметра sysctl net.ipv4.tcp_tw_reuse в 1 помогла. По крайней мере соединения теперь устанавливаются без ошибок, хотя количество TIME_WAIT не уменьшилось. Ещё есть параметр net.ipv4.tcp_tw_recycle, его тоже можно установить в 1, тогда количество соединений не будет расти до запредельных значений, если это важно, однако это нарушает RFC, смысла не вижу, и в решении проблемы это не помогает.

А проблема вот в чём: установка TCP-соединений с такой частотой наглухо убивает процессор. При частоте запросов около 1500 в секунду полностью в астрал уходит i7-3770 всеми четырьмя ядрами с гипертредингом. Нет, он не виснет и даже не тормозит, запросы продолжает обрабатывать исправно, но загрузка становится строго 100%, и, видимо, дальнейшее увеличение частоты запросов невозможно. При этом web-сервер со всеми потрохами загружает процессор на считанные единицы процентов. Остальное - что-то системное. top показывает примерно 50/50 usr и sys, но процесс, съедающий процессорное время, не отображается. Что интересно - принимающий эти запросы сервер - mysql на другой машине, чувствует себя вполне комфортно, т.е. такая проблема только на исходящих соединениях, а не на входящих.

Вопросов, собственно, два: 1. Как посмотреть в top, какой скрытый процесс съедает процессор? Признаюсь - мне такое в последний раз очень давно нужно было, и я пользовался какой-то опцией top, вроде бы -S, но сейчас это не помогает - всё равно не видно. Понимаю, что ядро не увидеть, но ведь usr тоже много, кто-то же это съедает? 2. Что-нибудь с этим можно сделать, кроме как переписать всё, чтобы не открывать соединения в таких количествах (но это не в моей компетенции)?

ОС - Debian 7, хотя пробовалось и под Centos с тем же результатом.

shamus24 ()

accel-pptp - как его поставить без компиляции?

Привет всем.

Вот давно назрел вопрос: есть accel-pptp, но почему из него не делают пакетов ни .deb, ни .rpm? Или я плохо ищу? Но половина гугла забита рассказом о том, что сей чудесный модуль включили в ядро, а вторая половина - инструкции по установке его из исходников. А я не хочу из исходников - тащить на боевой сервер всяческие заголовки, библиотеки и прочее, совсем там не нужное - зачем? Когда-то для решения этой задачи поставил рядом другой linux (благо виртуалки есть), на нём скомпилировал, и готовые бинарники вручную перетащил. Но повторять этот подвиг что-то особого желания нет.

Кстати, о включении в ядро. А какой толк от наличия в ядре встроенного модуля pptp.ko, если обвязки к нему все равно нет? Как его вообще использовать-то, хотя бы теоретически? Да, я могу взять весь accel-pptp и собрать его из исходников. Но тогда я легко по ходу дела соберу и модуль для ядра, тем более, что со встроенным, скорее всего, и не заработает даже. То есть от наличия штатного только дополнительная заморочка - надо от него как-то избавиться, и установить свежескомпилированный.

 

shamus24 ()

Создать раздел на диске в скрипте

Ребята, неужели нет решения для такой простой задачи? Нужно в скрипте, без участия пользователя, создать раздел заданного размера на диске, автоматически выбрав для него свободное место (если есть, конечно), тип (primary/logical), создать extended раздел при необходимости, и вернуть имя устройства для этого раздела (/dev/sda5 например). Пока вижу только один путь - вызывать parted, парсить его вывод и строить команды для него же. Может готовое что-то есть? И нужно, чтобы с gpt работало.

shamus24 ()

RSS подписка на новые темы