Я полагаю, что будет необходимо, по крайней мере, иметь администратора домена на сервере LDAP, прибывшем для ввода их пароля по крайней мере в один раз для выполнения то, что Вы хотите и соединяете Samba с доменом.
Учитывая, что, шаги должны быть относительно простыми. Взятый от Samba Wiki, набор следующее в Вашей конфигурации самбы:
* passdb backend = ldapsam:ldap://
* ldap suffix =
* ldap admin dn
Затем выполненный smbpasswd-w, чтобы позволить самбе знать пароль для администратора dn.
Здесь существует также хорошая рецензия.
Не ожидайте, что это будет работать быстро...
CD к каталогу, где Вы подозреваете, мог бы быть подкаталогом с большим количеством inodes. Если этот сценарий занимает огромное количество времени, Вы, вероятно, нашли где в файловой системе смотреть. / var хорошее начало...
Иначе, если Вы будете изменяться на главный каталог в той файловой системе и выполнять это и ожидать его для окончания, то Вы найдете каталог со всем inodes.
find . -type d |
while
read line
do
echo "$( find "$line" -maxdepth 1 | wc -l) $line"
done |
sort -rn | less
Я не волнуюсь по поводу стоимости сортировки. Я запустил тест, и сортировка неотсортированного вывода этого против 350 000 каталогов заняла 8 секунд. Начальная находка взяла. Реальная стоимость открывает все эти каталоги в цикле с условием продолжения. (сам цикл занимает 22 секунды). (Данные тестирования были выполнены на подкаталоге с 350 000 каталогов, один из которых имел миллион файлов, остальные имели между 1 и 15 каталогами).
Различные люди указали, что ls не силен в этом, потому что он сортирует вывод. Я попробовал эхо, но это является также не большим. Кто-то еще указал, что статистика дает эту информацию (количество записей каталога), но что это не портативно. Оказывается, что находят, что-maxdepth действительно быстр во вводных каталогах и считает .files, так... вот.. точки для всех!
Grrr, комментарий требует 50 представителей, таким образом, этот ответ является на самом деле комментарием к ответу chris.
Так как корреспондент, вероятно, не заботится обо всех каталогах, только худшие, затем с помощью вида являются, вероятно, очень дорогим излишеством.
find . -type d |
while
read line
do
echo "$(ls "$line" | wc -l) $line"
done |
perl -a -ne'next unless $F[0]>=$max; print; $max=$F[0]' | less
Это не столь завершено как Ваша версия, но что это делает распечатать строки, если они больше, чем предыдущий максимум, значительно уменьшая уровень шума, распечатанный, и сохраняя расход вида.
Оборотная сторона этого - то, если у Вас будет 2 очень больших каталога, и первое, оказывается, имеет еще 1 inode, чем 2-е, то Вы никогда не будете видеть 2-е.
Больше полного решения состояло бы в том, чтобы записать более умный сценарий жемчуга, который отслеживает лучшие 10 значений, замеченных, и распечатывает значения в конце. Но это слишком длинно для быстрого ответа serverfault.
Кроме того, некоторые midly более умные сценарии жемчуга позволили бы, Вы пропустить цикл с условием продолжения - на большинстве платформ, ls сортируете результаты, и это может также быть очень дорого для больших каталогов. ls вид не необходим здесь, так как все, о чем мы заботимся, является количеством.
Это не прямой ответ на Ваш вопрос, но поиск недавно измененных файлов с небольшого размера находкой использования мог бы сузить Ваш поиск:
find / -mmin -10 -size -20k
find /path ! -type d | sed 's,/[^/]*$,,' | uniq -c | sort -rn
ls не найдет файлы, имена которых запускаются с периода. Используя находку избегает этого. Это находит каждый файл в дереве каталогов, ступает от базового имени с конца каждого пути и считает количество раз, каждый путь к каталогу появляется в получающемся выводе. Вам, вероятно, придется поместить!"" в кавычках, если Ваша оболочка жалуется на это.
Inodes может также быть израсходован файлами, которые были удалены, но считаются открытые рабочим процессом. Если этот пакет Munin включает какие-либо постоянно под управлением программы, другая вещь проверить состоит в том, содержит ли это открытый необычное количество файлов.
(не бывший способный комментировать действительно становится старым - это для egorgry),
egorgry - ls-i печатает inode ЧИСЛО для записи, не КОЛИЧЕСТВО inode.
Попробуйте его файлом в Вашем каталоге - Вы будете (вероятно), видеть одинаково высокое количество, но это не количество inodes, это - просто inode #, Ваша запись каталога указывает на.
Я был бы скот вынуждать этого: выполненная растяжка на всем устройстве для базовой линии, затем осуществляет проверку некоторое время спустя, и незаконный каталог перетерпит как воспаленный ползунок.
[gregm@zorak2 /]$ ls -i /home 131191 gregm
мой дом на моем ноутбуке использует 131191 inodes.
Можно использовать этот небольшой отрывок:
find | cut -d/ -f2 | uniq -c | sort -n
Это распечатает, сколько файлов и каталогов находится в каждом из каталогов в текущей папке с крупнейшими преступниками внизу. Это поможет Вам найти каталоги, которые имеют много файлов. (больше информации)
Я пытался записать эффективный конвейер оболочки, но это стало громоздким и или медленным или неточным, например,
find . -depth -printf '%h\n' | uniq -c | awk '$1>1000'
перечислит листовые каталоги (и некоторые другие) больше чем с 1 000 файлов в них. Так, вот сценарий Perl, чтобы сделать это эффективно и во время и в RAM. Вывод похож
«файлы в поддереве» «files-directly-in-directory» «имя каталога»
таким образом, можно массажировать и отфильтровать его легко он с помощью нормальных инструментов, например, вид (1) или awk (1) как выше.
#! /usr/bin/perl -w
# Written by Kjetil Torgrim Homme <kjetil.homme@redpill-linpro.com>
use strict;
use File::Find;
my %counted;
my %total;
sub count {
++$counted{$File::Find::dir};
}
sub exeunt {
my $dir = $File::Find::dir;
# Don't report leaf directories with no files
return unless $counted{$dir};
my $parent = $dir;
$parent =~ s!/[^/]*$!!;
$total{$dir} += $counted{$dir};
$total{$parent} += $total{$dir} if $parent ne $dir;
printf("%8d %8d %s\n", $total{$dir}, $counted{$dir}, $dir);
delete $counted{$dir};
delete $total{$dir};
}
die "Usage: $0 [DIRECTORY...]\n" if (@ARGV && $ARGV[0] =~ /^-/);
push(@ARGV, ".") unless @ARGV;
finddepth({ wanted => \&count, postprocess => \&exeunt}, @ARGV);
Если проблемой является один каталог со слишком многими файлами, вот простое решение:
# Let's find which partition is out of inodes:
$ df -hi
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 2.4M 2.4M 0 100% /
...
# Okay, now we know the mount point with no free inodes,
# let's find a directory with too many files:
$ find / -xdev -size +100k -type d
Идея позади find
строка - то, что размер каталога пропорционален на сумму файлов непосредственно в том каталоге. Так, здесь мы ищем каталоги с тоннами файлов в нем.
Если Вы не хотите предполагать число и предпочитать перечислять все подозрительные каталоги, заказанные "размером", это легко также:
# Remove the "sort" command if you want incremental output
find / -xdev -size +10k -type d -printf '%s %p\n' | sort -n
Один лайнер, который возвращает количество inode каждого дочернего элемента данного каталога с наибольшими записями внизу.
find . -mindepth 1 -printf "%p/%i\n" \
| awk -F/ '{print $2"/"$NF}' | sort -u \
| cut -d/ -f1 | uniq -c | sort -n
#!/bin/bash
# Show inode distribution for given directory
dirs=$(find $1 -mindepth 1 -maxdepth 1 -type d)
for dir in $dirs
do
inode_count=$(find $dir -printf "%i\n" 2> /dev/null | sort -u | wc -l)
echo "$inode_count $dir"
done
Запустите его следующим образом (учитывая, что указанный выше сценарий находится в исполняемом файле в вашем рабочем каталоге)
./indist / | sort -n