Wednesday, May 9th, 2012 02:59 pm

На ITшных собеседованиях любят задавать задачку: что делать, если в директории так много файлов, что попытка применить rm * (и даже ls *2012*) натыкается на ограничение длины  командной строки.

Я раньше думал, что задачка чисто умозрительная. Фиг там. Сегодня я случайно нашёл директорию, в которой лежало более ДВУХСОТ ТЫСЯЧ файлов. ls на ней задумывался навсегда, потому что по умолчанию пытался их отсортировать по алфавиту. du думал секунд двадцать.

Файлики туда добавлялись постепенно. Много лет. Каждый день по несколько десятков. И файловая система не сдохла. UFS на солярке.

Оригинал этой записи в личном блоге.
Любые материалы из этого блога запрещается использовать на сайте livejournal.ru в любой форме и любом объёме.

Wednesday, May 9th, 2012 03:09 pm (UTC)
всю жизнь же такео делали через find | xargs

ну и ls -f тоже никто не отменял
Wednesday, May 9th, 2012 03:27 pm (UTC)
месяц назад у меня очередные письморассылатели зафигачили чуть меньше 500 тысяч писем в test@mail.ru, утверждая что это такой специальный адрес для тестов. чистил почтовую очередь, грязно ругался...
обычный ext4 линуксовый, правда распихано было по 2-3 каталогам.
Wednesday, May 9th, 2012 03:40 pm (UTC)
У меня были миллионы...

http://jerom.livejournal.com/191040.html
Wednesday, May 9th, 2012 03:44 pm (UTC)
ну что он мог сказать... denied, blacklisted.
сколько-то туда влилось же:)
Wednesday, May 9th, 2012 03:47 pm (UTC)
find -exec если POSIX (т.е. без '+', а c';') будет выполнять по форку на каждый файл -- это вообще вешалка.

А так, да, Solaris UFS нетороплив, но фактически неубиваем
Wednesday, May 9th, 2012 04:24 pm (UTC)
Нет, конечно, оно высовывает столько, сколько влезает в ARG_MAX, см. SUSv3
Wednesday, May 9th, 2012 05:09 pm (UTC)
напугал ежа голой жопой, извини

root@alexkuklin-x121:/home/alexkuklin# time du /srv/test/1/ -sh
4,5G /srv/test/1/

real 0m24.385s
user 0m1.880s
sys 0m12.553s

root@alexkuklin-x121:/home/alexkuklin# time ls -1 /srv/test/1/ | wc
1023105 1023105 17392785

real 0m17.561s
user 0m16.993s
sys 0m1.188s

root@alexkuklin-x121:/home/alexkuklin# df /srv/test; df /srv/test -i;
Файлова с-ма 1K-блокове Заети Свободни Изп% Монтирана на
/dev/mapper/x121-test 30963708 4470188 24920912 16% /srv/test
Файлова с-ма I-възли Заети Свобод Изп% Монтирана на
/dev/mapper/x121-test 1966080 1068659 897421 55% /srv/test

root@alexkuklin-x121:/home/alexkuklin# mount

/dev/mapper/x121-test on /srv/test type ext3 (rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered)

это все в процессе создания еще файлов со скоростью от 500 до 1000 файлов в секунду, на ноуте.
Wednesday, May 9th, 2012 05:33 pm (UTC)
на почти двух миллионах у танка отвалилась башня кончились i-node-ы:

1966067
bash: 00000000001dfff4: Няма свободно място на устройството

root@alexkuklin-x121:/home/alexkuklin# time ls -1 /srv/test/1/ | wc
1966068 1966068 33423156

real 0m31.722s
user 0m30.654s
sys 0m1.932s
root@alexkuklin-x121:/home/alexkuklin# time du /srv/test/1/ -sh
7,6G /srv/test/1/

real 0m50.195s
user 0m2.992s
sys 0m20.997s

так что дифирамбы солярке... эээ... преждевременны :)
сейчас попробую этот зоопарк удалить
Wednesday, May 9th, 2012 05:44 pm (UTC)
Это что, български език?
Wednesday, May 9th, 2012 05:45 pm (UTC)
да
Wednesday, May 9th, 2012 05:57 pm (UTC)
Я натурально как-то нашел директорию с сессиями от похапе, которая не чистилась, ну и в ней было:
17:17 < CoolCold> listing was several hours long..
17:18 < CoolCold> it found 10 million of files finally

Я б не сказал что жизнь сервера была как-то особенно печальна, lenny bpo kernel (2.6.32), файлуха xfs. Удалялось это два дня, причем с отключенными барьерами, с включенными может и за неделю бы не справилось..
Wednesday, May 9th, 2012 06:42 pm (UTC)
18000 файлов в одном каталоге я создавал ещё в конце прошлого века, на 486SX25 c 4Mb памяти. Это, конечно, не 200000, но тамошней freebsd хватило, чтобы rm * сломался, пришлось делать find | xargs.

А не так давно "очищал корзину" в винде, в которой скопилось чуть более миллиона файликов. А всего-то - удалил с десяток папок по 100-120 тысяч файликов в каждой, забыв, что "синие панельки" (FAR manager) по умолчанию удаляют в корзину.

Кстати, эти 100000 файликов в одном каталоге у меня создаются примерно за сутки. А всего за сутки создаётся примерно 250000 файликов в пяти каталогах, затем создаются новые пять каталогов на новые сутки, и так по кругу уже года два. Старые файлы, правда, удаляются (автоматически, после архивации) :-)

NTFS, WXP. Пока не сдохла, и даже не тормозит...
Wednesday, May 9th, 2012 07:48 pm (UTC)
Как умозрительная? Вспомни закончившиеся иноды на одну букву на народе )
Там не 200k файлов (вернее, каталогов) было, а только 65k вроде, но всё равно много.
Wednesday, May 9th, 2012 11:06 pm (UTC)
А какая разница, каким образом образовалось такое количество файлов?
ls/du нормально отрабатывает
удаляется, правда, очень долго, но это ожидаемо
Wednesday, May 9th, 2012 11:07 pm (UTC)
ну может она и неправильная, но оно всегда так было, и об этом тоже на собеседованиях спрашивают :)
Thursday, May 10th, 2012 01:31 pm (UTC)
Таки Unix очень хорошая система.

У заказчика было такое на HP-UX. ls умирала, но удалили через find | xargs.

И да, айноды кончаются первыми. Их надо довесить для таких экспериментов, количество же регулируется.

Но система вполне живуча.