LINUX.ORG.RU

Сообщения Nohack

 

Оцените код написанный ИИ

Решил я проверить куда ходят машины из моей LAN и сколько скачивают. Попробовал сначала ntopng, но это монстр которого я быстро удалил. Так как готовых скриптов я не нашёл, а самому писать лень, то попросил ИИ написать скрипт на баше. Потом попросил его переписать на Perl, так как на баше оно тормозит. Получилось не сразу, он допускает грубые ошибки, однако все строки в итоге написаны ИИ.

#!/usr/bin/perl
use strict;
use warnings;
use POSIX 'strftime';
use constant {
    IN_BYTES => 0, IN_PKTS => 1,
    OUT_BYTES => 2, OUT_PKTS => 3
};

die "Usage: $0 <interface>\n" unless @ARGV;
my $if = shift;
my $dir = "/var/log/network_stats";
my $interval = 3600;  # Flush interval in seconds
my $subnet = qx(ip -o -4 addr show $if) =~ m{inet\s+(\d+\.\d+\.\d+)[^/]+} ? "$1." : die "Can't get subnet\n";
$subnet =~ s/\./\\./g;

my %local_ips;
my $last_date = strftime("%Y-%m-%d", localtime);

$SIG{ALRM} = sub { update_stats(); alarm($interval - (time % $interval)) };
$SIG{INT} = $SIG{TERM} = sub { close TCPDUMP; exit 0 };

sub fmt_bytes {
    my $b = shift // 0;
    return $b < 1024 ? sprintf("%-7dB", $b) :
           $b < 1048576 ? sprintf("%-7dKB", $b/1024) :
           sprintf("%-7dMB", $b/1048576);
}

sub update_stats {
    my $date = strftime("%Y-%m-%d", localtime);
    mkdir "$dir/$last_date";
    
    for my $ip (keys %local_ips) {
        open my $fh, '>', "$dir/$last_date/$ip.txt" or next;
        printf $fh "%-16s  %-9s  %-8s  %-9s  %-8s\n%-16s  %s\n", 
            "Remote IP", "In Bytes", "In Pkts", "Out Bytes", "Out Pkts",
            "-" x 16, "-" x 40;
        for my $remote (sort keys %{$local_ips{$ip}}) {
            my $stats = $local_ips{$ip}{$remote};
            printf $fh "%-16s  %9s  %8d  %9s  %8d\n",
                $remote, fmt_bytes($stats->[IN_BYTES] // 0), $stats->[IN_PKTS] // 0,
                fmt_bytes($stats->[OUT_BYTES] // 0), $stats->[OUT_PKTS] // 0;
        }
        close $fh;
    }
    
    %local_ips = (), $last_date = $date if $date ne $last_date;
}

open(TCPDUMP, "exec tcpdump -i $if -nn -l -e tcp or udp 2>/dev/null |") or die $!;
alarm($interval - (time % $interval));

while (<TCPDUMP>) {
    next unless /(\d+\.\d+\.\d+\.\d+)\.?\d*\s*>\s*(\d+\.\d+\.\d+\.\d+)\.?\d*.*?length\s+(\d+)/;
    my ($src, $dst, $len) = ($1, $2, $3);
    
    if ($src =~ /^$subnet/) {
        $local_ips{$src}{$dst}[OUT_BYTES] = ($local_ips{$src}{$dst}[OUT_BYTES] // 0) + $len;
        $local_ips{$src}{$dst}[OUT_PKTS] = ($local_ips{$src}{$dst}[OUT_PKTS] // 0) + 1;
    }
    if ($dst =~ /^$subnet/) {
        $local_ips{$dst}{$src}[IN_BYTES] = ($local_ips{$dst}{$src}[IN_BYTES] // 0) + $len;
        $local_ips{$dst}{$src}[IN_PKTS] = ($local_ips{$dst}{$src}[IN_PKTS] // 0) + 1;
    }
} 

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

 

Nohack
()

Посоветуйте нормальный способ шарить файлы с samba на android

Попробовал смотировать samba шару на андроиде с помощью CIFS. Всё работает, но только если его открывать через файловый менеджер андроида. Из приложения не получается, так как оно видит только флешку, CIFS не видит. Если файл в приложении закрыть то всё, повторно его из приложения уже не открыть, нужно опять файл через файловый менеджер искать его в CIFS и открывать оттуда. Это неудобно, читалки не запоминают названия и расположение книг.

Кроме того, CIFS какой-то тормозной и похоже что не кешируется, большие файлы с аудиокнигами тупят очень сильно.

Можно ли обойтись без полного зеркалирования ?

 

Nohack
()

Как меня удивила Ubuntu

[хотел написать в Talks, но туда нет прав писать, перенесите пожалуйста :) ] Я так давно в IT что меня мало чем можно удивить, но сегодня у меня глаза на лоб полезли. Ну так вот, решил я сегодня запустить Ubuntu Live Desktop чтобы кое-что скомпилировать и забыть. Открыл youtube с музыкой и начал работать. В фоне youtube играл очень очень тихо, еле слышно. Я покрутил крутилку на внешних колонках, громкость не увеличилась, пиликанье оставалось всё таким же слабым. Я выкрутил громкость на минимум, вроде ничего не поменялось, пиликает чуть слышно. Тут я понял, что ничего не понимаю. Крутил туда сюда, ничего не меняется. Стал искать источник звука - левая колонка шипит, правая шипит, есть ещё сабвуфер, ну думаю не может же он один пиликать. И тут я решил увеличить громкость софтово, на панели Ubuntu и о чудо - звук появился! Музыка стала играть громко, но как-то странно, не так как обычно. Быстро нашел источник звука, им оказался … мой монитор! OMFG WTF ?? Стал искать инструкцию на монитор и нашел, что в нём есть встроенные колонки и Ubuntu каким-то невероятным образом вывела звук на монитор через Displayport. Вот такое чудо сегодня произошло.

Всем хорошего дня! :)

 

Nohack
()

Ох BTRFS, ну сколько можно

Сколько лет прошло, думал BTRFS довели до ума, решил использовать её в продакешене, но прошло два дня и …

2 недели тестировал все возможные способы репликации виртуальных машин с одного места в другое, без простоя. Протестировал кучу разных способов и остановился на BTRFS, как на единстрвенной COW которая не ест SSD. Кстати, фанатам ZFS ничего не скажу, живите спокойно в блаженном неведении :)

Что я проверил:

  1. ZFS, мучал около недели, как быстродействием так и оверхедом на диск не доволен, ещё RAM жрёт, а без RAM совсем печально всё. Мне не подходит, так как вся RAM отдаётся виртуалкам, хосту с ZFS ничего не останется, почти.
  2. LVM, да, у неё есть возможность как у ZFS сделать онлайн инкрементальную реприкацию, почти как в zfs send/recieve, но об этом мало известно. Отказался из-за чудовищно низкой скорости при наличи снапшотов, которые необходимы для репликации, в остальном терпимо.
  3. LVM thin, очень похожа на ZFS, те-же недостатки, мало тестировал
  4. BTRFS - почти не ест SSD, огромные проблемы с фрагмантацией, но я нашел способ их решить, поэтому остановился на ней

Дано:

  1. сервер с qemu/libvirt, Debian bookworm
  2. одна виртуалка, с ext4 mysql innodb блекджеком и шл ну в общем сайт PHP, данных всего 100Гб, довольно активная - 20ГБ записей на диск в сутки, диск, 70% из них блоками <=4k, 20% 8k, и так далее. Как видите много random write. RAW диск виртуалки на разделе BTRFS.

Перенёс всё со старого хоста ext4 на новую виртуалочку с RAW на btrfs разделе. Всё работало полтора дня и началось:

  1. начали биться индексы у таблиц
  2. данные в таблицах начали исчезать Долго не терпел, сразу всё откатил назад, у юзеров стресс, пьют валериану.

Не ожидал такого. Запустил btrfs scrub - ошибок не обнаружено. Да как так то? BTRFS raid1, значит ошибка внутри BTRFS или в интерфейсе между KVM и BTRFS.

Вот такой вот опыт.

А я уже и дефрагментатор для неё новый написал, офигенный, который не жрёт ни диск ни SSD, но видимо не судьба.

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

Что теперь делать даже не знаю, рисковать с BTRFS больше не хочу, а других подходящих COW c онлайн репликацией снапшотами не существует …

 , , , ,

Nohack
()

Вопрос к специалистам по репликации Glusterfs

Много много читал про gluster но так и не нашёл ответа на свой вопрос. Является ли асинхронная репликация (Geo-replication) в gluster транзакционной ? Запустив, например, mysql на gluster master сервере, будет ли он безопасно реплицироваться на slave. В случае если master неожиданно умрёт, slave нормально поднимется из бинарного лога mysql ?

 ,

Nohack
()

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