LINUX.ORG.RU
решено ФорумAdmin

Фигня какая-то с lastlog

 ,


0

2
$ ls -lh /var/log/lastlog 
-rw-rw-r-- 1 root utmp 34G сент.  9 17:42 /var/log/lastlog
$ df -lTh /var/log
Filesystem                           Type  Size  Used Avail Use% Mounted on
/dev/mapper/balvg-gentoo64--var--lib ext4   40G   24G   14G  64% /

Ну, то, что оно 34Гб занимает из 24Гб занятых я ещё пойму — мало ли, файл разряжённый... хотя и влогах.

Но, чёрт возьми, откуда там, вообще, 34Гб? Особенно с учётом того, что это внутренний LXC-контейнер, к которому снаружи нет прямого доступа и куда логинился только мой один аккаунт. При чём очень, очень редко. Буквально, раз в пару месяцев обычно.

WTF?

...

И, собственно, вопрос — если я его тупо прибью, ничего не развалится? За все 17 лет с Linux я на /var/log/lastlog внимания не обращал, обычно он сидел такой мелкий и тихий в углу... :)

★★★★★

Ответ на: комментарий от Deleted

Ты забыл сказать самое интересное: что там внутри?

Да нули в основном, как обычно.

Кстати, забавно. Ещё faillog на 3.7Гб — вообще из одних нулей:

# ls -lh /var/log/faillog 
-rw-r--r-- 1 root root 3,7G сент.  4  2013 /var/log/faillog
# hexdump -C faillog 
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
e78e4ec0

KRoN73 ★★★★★
() автор топика

Жесть какая o_O

В общем, грохнул я этот файл. Места на диске, как и ожидалось, не добавилось. Залогинился, вышел. Новый не создаётся, lastlog ругается на отсутствие файла. Сделал touch /var/log/lastlog. Перелогинился. Файл /var/log/lastlog весит 34Гб... Что за нафиг, WTF?

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

man lastlog

The lastlog file is a database which contains info on the last login of each user. You should not rotate it. It is a sparse file, so its size on the disk is usually much smaller than the one shown by «ls -l»

sdio ★★★★★
()
Ответ на: комментарий от KRoN73

преаллокация, например, чтобы не закончилось место внезапно

anonymous
()
Ответ на: комментарий от KRoN73

Всё правильно, всё по юникс-вею (ц). Зачем фигачить в файл базу данных с индексом, если можно создать файл, в котором записи для всех UID-ов хранятся последовательно (без пропусков), и возложить на ФС обязанность по эффективному хранению этого дела?

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Хотя IMHO красивее было бы сделать директорию, в которой запись для каждого UID-а хранится в отдельном файле. Раз уж делать из ФС базу данных, так полностью.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от sdio

С какой-то стороны — не лучше, чем файл размером 2^32*ENTRY_SIZE. Если ФС умеет в sparse files, то почему бы ей не уметь в хранение директорий в виде деревьев?

(Это я всё вспоминаю слова Ганса Рейзера о том, что СУБД — это то, чем должны быть хорошо спроектированные файловые системы.)

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Зачем фигачить в файл базу данных с индексом, если можно создать файл, в котором записи для всех UID-ов хранятся последовательно

Откуда 34Гб? В системе 29 пользователей. У меня на машинах с куда большим числом пользователей никогда такого безобразия не было.

Вот, другая машина — 62 пользователя, lastlog «весит» 500Мб.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73
lve@gw2: /tmp$ dd if=/dev/zero bs=1k seek=34000000 count=1 of=lastlog
1+0 records in
1+0 records out
lve@gw2: /tmp$ ls -lh lastlog 
-rw-r--r-- 1 lve users 33G сен  9 21:02 lastlog
lve@gw2: /tmp$ du -h lastlog 
4.0K	lastlog
lve@gw2: /tmp$ 

Кто-то сглюкнул при добавлении записи. Учитывая, что в него обычно пишет login, то становится неприятно.

Есть подозрение на кривое преобразование uid 16bit в uid 32bit

Небыло ли частичного обновления библиотек ?

vel ★★★★★
()
Ответ на: комментарий от vel

Небыло ли частичного обновления библиотек ?

Нет, всё как часы обновляется. Система там простенькая совсем.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от intelfx

Яхз, почему именно 34 GiB. Каков наибольший UID в системе?

Ясно. Вот, где собака порылась. Кто б мог подумать :)

В той системе, где 0.5Гб — 1770077

Там, где 34Гб — 121401973

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Я конечно понимаю, что uid_t == uint32_t и у нас могут быть 4294967295+1 пользователей, но ... но зачем же так? ;)

Точенее, как так вышло?

В жисть не видел uid больше nobody.

beastie ★★★★★
()
Ответ на: комментарий от beastie

но ... но зачем же так? ;)

У меня сквозная нумерация пользователей по всем моим машинам и контейнерам. Чтобы при переносе контейнера с одной машины на другую конфликтов и непоняток с uid не было.

Поэтому uid обычно состоит из номера машины, на которой первый раз заводился юзер + номера самого юзера :) Т.е. это 177+0077 и 1214+01973. Номера машин и юзеров в свою очередь тоже не последовательные.

...

Теперь буду думать, может, ну его нафиг и просто подряд uid'ы назначать, сверяясь по табличке в синхронизированном текстовом файле :) А то реально такие размеры файлов, хоть и sparse, с толку сбивать будут. Опять же, контейнер запаковать/распаковать или по ssh перекинуть — как ещё этот sparse обработается... Я сколько раз уже нарывался, когда они разворачивались в полный реальный объём.

KRoN73 ★★★★★
() автор топика
Последнее исправление: KRoN73 (всего исправлений: 3)
Ответ на: комментарий от KRoN73

Ну так собственно говорили уже в этом треде — по всей видимости, формат lastlog предусматривает хранение данных о всех пользователях по порядку без пропусков, чтобы сэкономить на индексации.

intelfx ★★★★★
()
Ответ на: комментарий от beastie

Хм, а почему не хранишь пользователей в LDAP?

Потому что у меня целая куча не связанных машин, некоторые могут вообще в офлайне оказываться :)

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Дак один AAA сервер с LDAP и pam_ldap на все другие. Хотя тут тоже плюсы и минусы. (Но плюсов всё же больше.) Но не настаиваю. Так, просто, как идея, если переделывать будешь.

beastie ★★★★★
()
Ответ на: комментарий от dhameoelin

Интересно, можно ли руками синкать базу пользователей в таком случае?

Я про «синкать» ничего не говорю :) Перенос контейнера на другой хост — это не синк.

KRoN73 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.