Ускоряем pacman при работе с базой данных

h4tr3d
точно будет, когда проверишь, пока я пальцем в небо тыкаю :) и зачем ты пионера убил!?

2пионер: ввести пароль рута, и запустить проверку на ту файловую систему, на которую ругань. И заодно сразу исправь /etc/fstab, убери из амигиной строчки последнюю 1 и замени на 0
Всё проверил - всё работает. Инструкцию поправил. Пионера жалко, но не очень - одним арчеводом меньше, ничего страшного :lol:

pioner14, с меня ящик сала :friends:

h4tr3d, тогда может и журналируемая ФС не нужна?
Разберемся, голубчик!
h4tr3d
2пионер: ввести пароль рута, и запустить проверку на ту файловую систему, на которую ругань. И заодно сразу исправь /etc/fstab, убери из амигиной строчки последнюю 1 и замени на 0

Большое спасибо!
и зачем ты пионера убил!?

одним арчеводом меньше
Пионера так просто не убьешь! :)
Да ладно, Amigo ты ведь предупреждал.
Еще один маленький опыт приобрел. :/ :)
давно использую pacman-cage, только fs в лоопе ext4 без журнала с синхронной записью.

#!/bin/bash
#
#   pacman-cage
#
myver='2.9.8'
dbroot="/var/lib/pacman"
pacmandb="/var/lib/pacman.db"
usage() {
        echo "pacman-cage $myver"
        echo "usage: $0 [pacman_db_root]"
        echo
        echo "pacman-cage creates a loopbacked filesystem in a contigious file."
        echo "This will give better response times when using pacman"
        echo
}
die() {
        echo "pacman-cage: $*" >&2
        exit 1
}
die_r() {
        rm -f /tmp/pacman.lck
        die $*
}
if [ "$1" != "" ]; then
        if [ "$1" = "-h" -o "$1" = "--help" ]; then
                usage
                exit 0
        fi
        dbroot=$1
fi
if [ "`id -u`" != 0 ]; then
        die "You must be root to cage the database"
fi
# make sure pacman isn't running
if [ -f /tmp/pacman.lck ]; then
        die "Pacman lockfile was found.  Cannot run while pacman is running."
fi
# make sure pacman.db hasnt already been made
if [ -f $pacmandb ]; then
        die "$pacmandb already exists!."
fi
if [ ! -d $dbroot ]; then
        die "$dbroot does not exist or is not a directory"
fi
# don't let pacman run while we do this
touch /tmp/pacman.lck
 
# step 1: sum the old db
echo "==> md5sum'ing the old database..."
find $dbroot -type f | sort | xargs md5sum >/tmp/pacsums.old
echo "==> creating pacman.db loopback file..."
dd if=/dev/zero of=$pacmandb bs=1M count=150 > /dev/null 2>&1
echo "==> creating ext2 -O dir_index -b 1024 -m 0 on $pacmandb..."
yes | mke2fs -t ext4 -O ^has_journal -b 1024 -m 0 $pacmandb > /dev/null 2>&1
yes | tune2fs -o journal_data_writeback $pacmandb
     
echo "==> creating temporary mount point /mnt/tmp-pacman.."
mkdir /mnt/tmp-pacman
echo "==> mounting pacman.db to temporary mount point..."
mount -o loop $pacmandb /mnt/tmp-pacman
echo "==> copying pacman database to temporary mount point..."
cp -a /var/lib/pacman/. /mnt/tmp-pacman
echo "==> unmounting temporary mount point..."
umount /mnt/tmp-pacman
echo "==> removing temporary mount point..."
rmdir /mnt/tmp-pacman
       
echo "==> moving old /var/lib/pacman to /var/lib/pacman.bak..."
mv /var/lib/pacman /var/lib/pacman.bak
       
echo "==> createing new pacman db mount point @ $dbroot..."
mkdir $dbroot
echo "==> Mounting new pacman db..."
mount -o loop,sync,defaults,data=writeback $pacmandb $dbroot
echo "==> md5sum'ing the new database..."
find $dbroot -type f | sort | xargs md5sum >/tmp/pacsums.new
echo "==> checking integrity..."
diff /tmp/pacsums.old /tmp/pacsums.new >/dev/null 2>&1
if [ $? -ne 0 ]; then
        # failed, move the old one back into place
        umount $dbroot
        rm $pacmandb
        mv $dbroot.bak $dbroot
        die_r "integrity check FAILED, reverting to old database"
fi
echo "==> Updating /etc/fstab to reflect changes..."
echo "$pacmandb $dbroot ext4 loop,sync,defaults,data=writeback 0 0" >> /etc/fstab
 
rm -f /tmp/pacman.lck /tmp/pacsums.old /tmp/pacsums.new
 
echo
echo "Finished.  Your pacman database has been caged!.  May the speedy pacman be with you."
echo
exit 0
способ интересный, но есть же pacman-optimize, который на один сектор винта все файлы бд пакетов переносит
в один сектор?
systemd должен умереть.
Похоже я что-то упустил :shock:
исходники pacman-optimize не смотрел, но осуждаю :D

Думается мне, что он просто всё кеширует, а не с секторами дисковыми возится. Ведь для поддержки такой функциональности, он должен разбираться не только в ext*, но и других, более или менее нативных ФС.
Разберемся, голубчик!
Amigo
исходники pacman-optimize не смотрел, но осуждаю :D

Думается мне, что он просто всё кеширует, а не с секторами дисковыми возится. Ведь для поддержки такой функциональности, он должен разбираться не только в ext*, но и других, более или менее нативных ФС.

это баш скрипт, достаточно простой

ЗЫ rss пропускает посты.
systemd должен умереть.
Думается мне, что он просто всё кеширует
Да нет, он просто собирает базу в один файл, грохает старую и разворачивает файл обратно на диск. А файловая система уже своими внутренними механизмами старается разместить копируемые файлы последовательно на диске, чем и достигается увеличение скорости доступа к базе. Говоря простыми словами, pacman-optimize дефрагментирует свою базу.
 
Зарегистрироваться или войдите чтобы оставить сообщение.