Ответы пользователя по тегу Linux
  • Как усановить php-curl?

    Melkij
    @Melkij
    PostgreSQL DBA
    Don't ask for end-of-life PHP versions or Ubuntu release, they won't be provided.

    собственно
    18.04 EOL уже с год как
    Ответ написан
    Комментировать
  • Как распарсить вывод ifconfig/ip, чтобы показывало имя интерфейса, отвечающее за беспроводную сеть?

    Melkij
    @Melkij
    PostgreSQL DBA
    Это должны быть те /sys/class/net/*, у которых существует /sys/class/net/$iface/wireless
    Ответ написан
    Комментировать
  • Почему большой iowait в cloud vm c postgres?

    Melkij
    @Melkij
    PostgreSQL DBA
    У яндекса весьма медлительные сетевые диски, совершенно верно. Именно по latency, что куда более критично для СУБД чем обещанная полоса пропускания или IOPS (которые у большинства хранилок предполагают совершенно абсурдную для СУБД глубину очереди команд).
    Ответ написан
    2 комментария
  • Как забрать с раздела 500ГБ и передать их другому разделу?

    Melkij
    @Melkij
    PostgreSQL DBA
    resize2fs /dev/centos/home с указанием размера файловой системы с каким-то запасом, до 400ГБ например обрезать. Критично следующим шагом не обрезать часть файловой системы.
    lvresize /dev/centos/home до желаемого размера
    lvresize /dev/centos/root до желаемого размера
    resize2fs /dev/centos/home
    resize2fs /dev/centos/root
    Ответ написан
    4 комментария
  • Postgres Логическая репликация, почему не идёт репликация?

    Melkij
    @Melkij
    PostgreSQL DBA
    The schema definitions are not replicated, and the published tables must exist on the subscriber.

    https://www.postgresql.org/docs/current/logical-re...
    По-моему, написано однозначно и не допускает вариантов прочтения. Нет?

    | psql

    иначе говоря, где вы создали таблицы и где потом пытаетесь create subscription делать. Это явно два разных места.
    Ответ написан
    Комментировать
  • Как скопировать данный из RAID 1 диска?

    Melkij
    @Melkij
    PostgreSQL DBA
    raid1 - это решение поддержания high availability на случай физического отказа накопителя. Ну эти, старые добрые HDD, помирающие в случайный момент времени и спокойно заменяемые в hot swap корзине на аналогичный из коробки с запасными частями, без прерывания работы сервера и сервисов.

    Всё.

    Если вы почему-то решили, что raid1 должен как-то заменять бекапы и страховать ошибки оператора - подумайте ещё раз.
    Ответ написан
  • Как увеличить размер раздела без потери данных?

    Melkij
    @Melkij
    PostgreSQL DBA
    Disklabel type: dos

    вот и есть лимит в 2ТиБ, msdos label больше не умеет.

    - делаете бекап
    - внимательно сохраняете номер стартового и конечного сектора файловой системы
    - отмонтируете раздел
    - убираете disklabel msdos, создаёте gpt
    - создаёте новый раздел начинающийся в точности на той же позиции. Конец раздела можно сразу до конца диска сдвинуть
    - монтируете раздел, проверяете что файловая система на месте
    - resize2fs
    - правите fstab если надо
    Ответ написан
    2 комментария
  • Перемещение оперативных файлов на SSD?

    Melkij
    @Melkij
    PostgreSQL DBA
    ядерный bcache, LVM cache
    Ответ написан
    Комментировать
  • Копирование одного диска на несколько, как ускорить?

    Melkij
    @Melkij
    PostgreSQL DBA
    попробуйте для начала dd if=/dev/sda | tee /dev/sdb /dev/sdc /dev/sdd > /dev/sdc
    сходу проверить негде, но не вижу причин почему бы это не работало.

    можно так
    dd if=/dev/sda | tee >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) > /dev/null

    чтобы был доступ к привычным опциям dd
    Ответ написан
    4 комментария
  • Как по вашему мнению рациональнее собрать дисковую систему на сервере?

    Melkij
    @Melkij
    PostgreSQL DBA
    raid10 на 6 дисков, конечно, если место не поджимает. Быстро, удобно, нет извращений "ой, системный диск пустой и вообще по нулям i/o, вебовый забит под завязку, а диски под базой загружены в потолок".
    raid5 под базой зрелище зело печальное в работе.
    Ответ написан
  • Как освободить пространство с LVM?

    Melkij
    @Melkij
    PostgreSQL DBA
    Если есть под рукой пустой накопитель от 82гб:
    - подключить доп диск
    - pvcreate на него на всю ёмкость
    - vgextend
    - pvmove старый_диск новый_диск
    - vgreduce
    - pvremove
    - переделываете партиции на nvme как нравится
    - повторить заново с pvcreate только теперь pvmove с временного диска обратно на nvme

    Если на время перенести некуда - то pvresize + уменьшить размер раздела, потом создать новый раздел на освободившемся месте.

    PS: доктор, я в каждой команде написал pg вместо vg, это ещё лечится?
    Ответ написан
    Комментировать
  • Почему в ubuntu ошибки Unable to fetch some archives при установке пакетов?

    Melkij
    @Melkij
    PostgreSQL DBA
    impish aka Ubuntu 21.10 уже EOL и удалена из репозиториев.
    Regular releases are supported for 9 months.

    Как и задумано.

    Вероятно, вы хотели использовать LTS релиз.
    Ответ написан
    Комментировать
  • Как определить источник обращение к БД?

    Melkij
    @Melkij
    PostgreSQL DBA
    Используйте более подробный log_line_prefix. В частности, нужен %h

    log_line_prefix = '%m %p %u@%d from %h [vxid:%v txid:%x] [%i] '

    Мы такой используем если нет значимых причин для иного.
    Ответ написан
    1 комментарий
  • С чего начинать тестирование двухюнитовых серверов с 16 планками U-DIMM и 24 хардами в Linux?

    Melkij
    @Melkij
    PostgreSQL DBA
    CPU(s):                          256
    On-line CPU(s) list:             0-255
    Thread(s) per core:              2
    Core(s) per socket:              64
    Socket(s):                       2

    Я не понял проблематику ситуации. 40 ядер, несколько сотен гигов RAM да пара десятков дисков - средняя железка, какие там у вас специфические проблемы такие? 40 ядер нынче не проблема даже одним сокетом получить.

    Что касается памяти тут отдельная история, поступила жалоба, что U-DIMMы работают только при полной сборке (все 16), либо подключенные последовательно (с1 по 4 место например), но подключая в 1,3,7,12(например) места некоторые планки не определяются, либо сервер работает не корректно (не запускается, не стартует).

    См. документацию к материнке. Там будет описано, в каком порядке необходимо заполнять слоты. Да, это стандартное требование JEDEC для DIMM'ов, что серверных, что десктопных. Технически связано с терминаторами. Затем, после требований стандарта, идёт логика как не повесить всю имеющуюся память на один и тот же канал памяти одного и того же CPU. NUMA всё-таки.
    Вы правда занимаетесь серверами?
    Ответ написан
  • Увеличение LVM раздела на внешней хранилки?

    Melkij
    @Melkij
    PostgreSQL DBA
    pvresize. Затем lvresize с resize2fs или lvcreate дальнейшие или ещё чего, смотря зачем увеличивали.
    Ответ написан
    Комментировать
  • Как без проблем расширить корневой диск на лету в виртуальной машине linux?

    Melkij
    @Melkij
    PostgreSQL DBA
    Раздел данных, который с высокой вероятностью нужно расширять делаете в конце блочного устройства. Так, чтобы за ним ничего не было. И неважно, рутовый это раздел или ещё какой.
    Когда понадобится расширить:
    1. расширяете блочное устройство
    2. через parted командой resizepart увеличиваете раздел
    3. затем расширяете файловую систему: resize2fs для ext4, xfs_growfs для xfs. Если у вас какая-то вдруг другая экзотика - предварительно уточните команду.

    Всё.

    Можно добавить lvm, вся разница что между 2 и 3 пунктом добавятся pvresize и lvresize. Либо, по желанию, можно будет создавать дополнительные разделы (и/или диски) и их добавлять в lvm.
    lvm поможет, если вы решили сделать отдельный раздел под ОС и отдельный под данные, а потом поняли, что раздел ОС сделали слишком маленьким.

    PS: "Виртуальная машина, не особо важно под каким будет гипервизором" - не все гипервизоры могут корректно оповестить гостевую систему об изменении блочного устройства, для некоторых нужен рестарт виртуалки.
    Ответ написан
    4 комментария
  • Можно ли ограничить доступ usb-носителей с исключениями штатными средствами?

    Melkij
    @Melkij
    PostgreSQL DBA
    поройтесь в сторону udev, например
    https://wiki.gentoo.org/wiki/Allow_only_known_usb_...
    https://unix.stackexchange.com/q/63199

    Конечно, это не имеет смысла если у пользователя есть рутовые права либо возможность их получить.
    Ответ написан
    1 комментарий
  • Как перенести работающую ОС Debian 11 на RAID1 с имеющейся LVM разметкой?

    Melkij
    @Melkij
    PostgreSQL DBA
    Решили что следующая схема распределения объема HDD будет наиболее подходящей:
    SWAP - RAID1 - 5Gb
    / - RAID1 - 24Gb
    /home - RAID5 - все оставшееся место

    не трогаете sda вообще на данном этапе!

    Вы забыли /boot упомянуть, предположу что считаем его как гигабайтный раздел без существенных изменений.
    Игнорируем разметку sda полностью, делаете таблицы разделов на sd[bcd] как
    1MiB bios_grub
    1GiB boot
    29GiB sys
    всё остальное data

    mdadm -C /dev/md0 -l 1 -n 4 missing /dev/sdb2 /dev/sdc2 /dev/sdd2
    mdadm -C /dev/md1 -l 1 -n 4 missing /dev/sdb3 /dev/sdc3 /dev/sdd3
    mdadm -C /dev/md2 -l 5 -n 4 missing /dev/sdb4 /dev/sdc4 /dev/sdd4 # другие опции по вкусу

    ждёте resync, обновляете mdadm.conf, отправляете железку в ребут для проверки что массивы корректно собираются сами.

    pvinit, vgextend новых md1 и md2 в имеющийся LVM
    pvmove root и swap на md1, хомяка на md2

    umount /boot , dd if=/dev/sda2 of=/dev/md0, grub-install /dev/sdb , grub-install /dev/sdc , grub-install /dev/sdd, обновить fstab вместо sda2 записать md0

    контрольный ребут

    vgreduce sda3 из lvm, удаляете таблицу разделов sda и создаёте новую идентичную прочим дискам,
    mdadm /dev/md0 -a /dev/sda2
    mdadm /dev/md1 -a /dev/sda3
    mdadm /dev/md2 -a /dev/sda4

    после resync всё готово. Через lvresize расширить размеры томов ну и resize2fs как обычно.
    Ответ написан
  • Как создать нового юзера и новую базу в postgres, на убунту?

    Melkij
    @Melkij
    PostgreSQL DBA
    Парольная аутентификация лишь один из множества доступных вариантов. Хотя наиболее простой и распространённый. Какой способ аутентификации будет требовать СУБД - зависит от списка правил в pg_hba.conf. Очень редко нужно что-то кроме служебного правила peer для postgres (именно из-за него psql после sudo -iu postgres не спрашивает никакие пароли, но только у postgres'а) и md5 для всего остального.

    Базово создание новой базы с отдельным пользователем-владельцем выглядит так (от суперпользователя базы):
    CREATE USER "$NEWOWNER" PASSWORD '$NEWPASS';
    CREATE DATABASE ${NEWDB} OWNER "$NEWOWNER";
    REVOKE ALL ON DATABASE $NEWDB FROM public;


    В соседнем ответе вам неверно подсказывают, что "можно сразу указать какому юзеру разрешен доступ". create database разрешит доступ всем (но именно подключение к базе, а не ко всему внутри базы - что частая проблема непонимания прав). И имеет смысл наоборот отобрать доступ от всех прочих, т.е. от public. Owner, конечно, доступ сохранит.

    Чуть ближе к production имеет смысл использовать такой шаблон:
    CREATE USER "$NEWOWNER" PASSWORD '$NEWPASS';
    CREATE DATABASE ${NEWDB} OWNER "$NEWOWNER";
    CREATE ROLE ${NEWDB}_role;
    CREATE ROLE ${NEWDB}_ro;
    CREATE ROLE ${NEWDB}_rw;
    GRANT ${NEWDB}_role TO ${NEWDB}_ro, ${NEWDB}_rw;
    REVOKE ALL ON DATABASE $NEWDB FROM public;
    GRANT CONNECT ON DATABASE $NEWDB TO ${NEWDB}_role;
    GRANT ${NEWDB}_rw TO "$NEWOWNER";
    \c $NEWDB
    ALTER SCHEMA public OWNER TO "$NEWOWNER";
    REVOKE ALL ON SCHEMA public FROM public;
    GRANT USAGE ON SCHEMA public TO ${NEWDB}_ro, ${NEWDB}_rw;
    ALTER DEFAULT PRIVILEGES FOR ROLE postgres GRANT SELECT ON SEQUENCES TO ${NEWDB}_ro;
    ALTER DEFAULT PRIVILEGES FOR ROLE postgres GRANT SELECT,USAGE ON SEQUENCES TO ${NEWDB}_rw;
    ALTER DEFAULT PRIVILEGES FOR ROLE postgres GRANT SELECT ON TABLES TO ${NEWDB}_ro;
    ALTER DEFAULT PRIVILEGES FOR ROLE postgres GRANT SELECT,INSERT,DELETE,UPDATE ON TABLES TO ${NEWDB}_rw;
    ALTER DEFAULT PRIVILEGES FOR ROLE "$NEWOWNER" GRANT SELECT ON SEQUENCES TO ${NEWDB}_ro;
    ALTER DEFAULT PRIVILEGES FOR ROLE "$NEWOWNER" GRANT SELECT,USAGE ON SEQUENCES TO ${NEWDB}_rw;
    ALTER DEFAULT PRIVILEGES FOR ROLE "$NEWOWNER" GRANT SELECT ON TABLES TO ${NEWDB}_ro;
    ALTER DEFAULT PRIVILEGES FOR ROLE "$NEWOWNER" GRANT SELECT,INSERT,DELETE,UPDATE ON TABLES TO ${NEWDB}_rw;

    В результате получим:
    - пользователя-владельца базы, который предназначен выполнять всякие миграции схемы данных
    - роль имя_базы_role которую можно давать другим пользователям для возможности подключения к этой базе, но без доступа к таблицам приложения (например, используем для мониторинга)
    - роль имя_базы_ro которая даст select-only права ко всем (в том числе будущим) таблицам, созданным от пользователя-владельца это базы
    - роль имя_базы_rw - соответственно для выполнения select,insert,update,delete
    Ответ написан
    Комментировать