Bug 58065 - делать sync после скачивания пакетов
Summary: делать sync после скачивания пакетов
Status: NEW
Alias: None
Product: Sisyphus
Classification: Development
Component: apt (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 enhancement
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2026-02-28 21:00 MSK by Sergey Y. Afonin
Modified: 2026-03-01 18:23 MSK (History)
6 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Sergey Y. Afonin 2026-02-28 21:00:38 MSK
Не плохо было бы сбрасывать дисковый кэш после скачивания пакетов. Например, это может помочь в принудительной установке пакетов из /var/cache/apt/archives в случае проблем с питанием при установке пакетов (rpm -Uvh --force *.rpm).

Можно, конечно, и самостоятельно подстраховываться посредством apt-get dist-upgrade -d предварительным.
Comment 1 Vitaly Chikunov 2026-02-28 22:04:42 MSK
Интересно конечно, но не известно на сколько это поможет в реальных жизненных ситуациях. (Тем более sync можно делать по-разному.) Лично мне бы нужно было проводить эксперименты, чтоб все понять.

ps. И ещё - нет ли этого уже в апстримном apt?
Comment 2 Sergey Y. Afonin 2026-03-01 14:05:51 MSK
> Интересно конечно, но не известно на сколько это поможет в реальных жизненных ситуациях.

Мне установка посредством rpm из /var/cache/apt/archives помогала. Правда там система уходила в процессе установки в нормальную перезагрузку (баг был когда-то, с systemd связанный). 

То есть база rpm порушенной получалась, но пакеты скачанные на диске были. А в случае сбоя по питанию предполагается, что если до sync, то ещё ничего не ставилось и ничего не произойдёт, а если после, то пакеты, опять же, уже зафиксированы на локальном носителе. Такие вот мысли.
Comment 3 Vitaly Chikunov 2026-03-01 17:15:23 MSK
Сравнил у нас и в Дебиане.

[root@alt /]# strace -yf -o a apt-get install pgpdump
[root@alt /]# grep sync a
65    fdatasync(5</var/lib/rpm/Sigmd5>) = 0
65    fdatasync(5</var/lib/rpm/Name>)   = 0
65    fdatasync(5</var/lib/rpm/Requirename>) = 0
65    fdatasync(5</var/lib/rpm/Sha1header>) = 0
65    fdatasync(5</var/lib/rpm/Group>)  = 0
65    fdatasync(5</var/lib/rpm/Dirnames>) = 0
65    fdatasync(5</var/lib/rpm/Providename>) = 0
65    fdatasync(5</var/lib/rpm/Installtid>) = 0
65    fdatasync(5</var/lib/rpm/Basenames>) = 0
65    msync(0x7fc3f9201000, 262424, MS_SYNC) = 0
65    msync(0x7fc3f9201000, 106192614, MS_SYNC) = 0
65    msync(0x7fc3f9201000, 262424, MS_SYNC) = 0
65    fdatasync(4</var/lib/rpm/Packages>) = 0
65    fdatasync(4</var/lib/rpm/Packages>) = 0
65    fdatasync(4</var/lib/rpm/Packages>) = 0
65    fdatasync(9</var/lib/rpm/Name>)   = 0
65    fdatasync(11</var/lib/rpm/Basenames>) = 0
65    fdatasync(12</var/lib/rpm/Group>) = 0
65    fdatasync(13</var/lib/rpm/Requirename>) = 0
65    fdatasync(14</var/lib/rpm/Providename>) = 0
65    fdatasync(19</var/lib/rpm/Dirnames>) = 0
65    fdatasync(20</var/lib/rpm/Installtid>) = 0
65    fdatasync(21</var/lib/rpm/Sigmd5>) = 0
65    fdatasync(22</var/lib/rpm/Sha1header>) = 0
65    fdatasync(4</var/lib/rpm/Packages>) = 0
65    fdatasync(22</var/lib/rpm/Sha1header>) = 0
65    fdatasync(21</var/lib/rpm/Sigmd5>) = 0
65    fdatasync(20</var/lib/rpm/Installtid>) = 0
65    fdatasync(19</var/lib/rpm/Dirnames>) = 0
65    fdatasync(14</var/lib/rpm/Providename>) = 0
65    fdatasync(13</var/lib/rpm/Requirename>) = 0
65    fdatasync(12</var/lib/rpm/Group>) = 0
65    fdatasync(11</var/lib/rpm/Basenames>) = 0
65    fdatasync(9</var/lib/rpm/Name>)   = 0
[root@alt /]#

Действительно, ничего нет кроме того, что делает rpm для rpmdb.

root@deb:/# strace -fy -o a apt-get install gum
root@deb:/# grep sync a
100   fsync(10</var/lib/dpkg/tmp.ci/md5sums>) = 0
100   fsync(10</var/lib/dpkg/tmp.ci/control>) = 0
100   fsync(9</var/lib/dpkg/tmp.ci>)    = 0
100   fsync(4</var/lib/dpkg/updates/tmp.i>) = 0
100   fsync(4</var/lib/dpkg/updates>)   = 0
100   sync_file_range(10</usr/bin/gum.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/changelog.Debian.gz.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/copyright.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/README.md.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/choose.tape.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/commit.sh.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/commit.tape.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/confirm.tape.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/convert-to-gif.sh.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/customize.tape.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/demo.sh.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/demo.tape.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/diyfetch.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/fav.txt.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/file.tape.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/filter-key-value.sh.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/flavors.txt.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/format.ansi.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/git-branch-manager.sh.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/git-stage.sh.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/gum.js.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/gum.py.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/gum.rb.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/input.tape.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/kaomoji.sh.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/magic.sh.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/pager.tape.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/posix.sh.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/skate.sh.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/spin.tape.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/story.txt.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/test.sh.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/doc/gum/examples/write.tape.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/gum/completion/gum.bash.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE <unfinished ...>
100   <... sync_file_range resumed>)    = 0
100   sync_file_range(10</usr/share/gum/completion/gum.fish.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/gum/completion/gum.zsh.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   sync_file_range(10</usr/share/man/man1/gum.1.gz.dpkg-new>, 0, 0, SYNC_FILE_RANGE_WRITE) = 0
100   fsync(9</var/lib/dpkg/info/gum.list-new>) = 0
100   fsync(9</var/lib/dpkg/info>)      = 0
100   fsync(9</var/lib/dpkg/info>)      = 0
100   fsync(4</var/lib/dpkg/updates/tmp.i> <unfinished ...>
100   <... fsync resumed>)              = 0
100   fsync(4</var/lib/dpkg/updates>)   = 0
100   fsync(4</var/lib/dpkg/updates/tmp.i>) = 0
100   fsync(4</var/lib/dpkg/updates>)   = 0
100   fsync(9</var/lib/dpkg/status-new>) = 0
100   fsync(9</var/lib/dpkg>)           = 0
100   fsync(9</var/lib/dpkg/updates>)   = 0
112   fsync(4</var/lib/dpkg/updates/tmp.i> <unfinished ...>
112   <... fsync resumed>)              = 0
112   fsync(4</var/lib/dpkg/updates>)   = 0
112   fsync(4</var/lib/dpkg/updates/tmp.i>) = 0
112   fsync(4</var/lib/dpkg/updates>)   = 0
112   fsync(4</var/lib/dpkg/updates/tmp.i>) = 0
112   fsync(4</var/lib/dpkg/updates>)   = 0
112   fsync(9</var/lib/dpkg/status-new>) = 0
112   fsync(9</var/lib/dpkg>)           = 0
112   fsync(9</var/lib/dpkg/updates>)   = 0
root@deb:/#

Синкают через sync_file_range каждый распакованный файл перед переименованием (плюс свою базу данных), но скачанный dpkg архив тоже нет.
Comment 4 Sergey Y. Afonin 2026-03-01 18:23:02 MSK
И я имею ввиду один sync делать, перед началом установки. После каждого скачивания наверное не нужно.