ubuntu server lentamente enchendo

5

Tivemos o compartilhamento do nosso servidor samba (ubuntu 8.04 ltr) no outro dia, mas quando fui analisá-lo, não consigo ver nenhuma das ações tendo muito a ver com eles

temos 5 compartilhamentos de grupo e, em seguida, cada usuário tem um compartilhamento individual

um usuário tem 22gigs de coisas e outros tem 10-20mb e todo mundo está vazio

então talvez como o total de 26gigs

Eu apaguei alguns arquivos ontem e libertei cerca de 250MB de espaço hoje, quando eu chequei, estava completamente cheio de novo e eu apaguei alguns arquivos antigos e liberei cerca de 170MB de material, mas posso vê-lo lentamente se arrastando no espaço livre.

Eu continuo executando um df -h

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1            241690180 229340500    169200 100% /
varrun                  257632       260    257372   1% /var/run
varlock                 257632         0    257632   0% /var/lock
udev                    257632        72    257560   1% /dev
devshm                  257632        52    257580   1% /dev/shm
lrm                     257632     40000    217632  16% /lib/modules/2.6.24-28-generic

/ volátil

o que posso fazer para tentar descobrir o que está ocupando muito do meu disco rígido? (Sou relativamente novo no unix em geral, então peço desculpas se isso não for bem explicado)

    
por Crash893 16.06.2010 / 20:39

7 respostas

5

(Esta é uma resposta focada no Linux. Outras variantes do UNIX podem ser diferentes.)

Existem duas informações relevantes para o seu problema: (1) quais arquivos estão preenchendo seu sistema de arquivos e (2) quais processos estão gravando nesses arquivos.

Notas

Abaixo, quando eu coloco o caractere $ em comandos, provavelmente é um espaço reservado onde você precisa substituir um valor real. Espero que seja óbvio onde fazer isso e para onde não.

Quais arquivos?

Esteja ciente de que há realmente dois recursos na maioria dos tipos de sistemas de arquivos que podem ser usados por arquivos individuais: metadados (por exemplo, inodes) e dados reais. Você pode ver o número de inodes (procure no Google por uma definição, mas eles são "ponteiros" para as estruturas que compõem seus arquivos) com um comando como:

df -i

... e como você já sabe, algo assim mostrará o espaço que está sendo usado pelos dados reais:

df -h

Além disso, esteja ciente de que o espaço do sistema de arquivos pode ser ocupado por arquivos que não existem no disco. Esses arquivos ainda estão no estado aberto por algum processo, mas foram removidos (cobriremos isso abaixo).

Depois de identificar o (s) sistema (s) de arquivos completo (s), é necessário começar a procurar muitos arquivos pequenos, alguns arquivos grandes ou ambos. Ficar sem recursos de metadados geralmente é causado por ter muitos arquivos pequenos, enquanto a falta de recursos de dados reais geralmente é causada por alguns arquivos grandes. Eu gosto de usar este comando para ajudar a encontrar os arquivos grandes:

sudo find $file_system -mount -ls | awk '{print $7, $11}' | sort -rn > $output

... e este comando para ajudar a encontrar diretórios com muitos arquivos pequenos ( Atualização: : adição de terminação nula para melhorar o tratamento de nomes de arquivos):

sudo find . -mount -print0 | xargs -0n 1 dirname | sort | uniq -c | sort -rn > $output

... esteja ciente de que esses comandos podem demorar um pouco para serem executados e fazer muita E / S, dependendo. Uma vez executado, você pode ler $output para encontrar os arquivos ou diretórios incorretos. O nome e a localização de cada um deles podem lhe dar uma dica de onde os dados estão vindo, mas requer alguma experiência com o Linux.

Depois de identificar os infratores, você pode rm $file se livrar do problema.

Quais processos?

A maneira mais direta de encontrar os processos potencialmente preenchendo seu sistema de arquivos é executar um comando como:

fuser -c $file_system 2>/dev/null

... que lhe informará o PID dos processos que possuem descritores de arquivos abertos (arquivos e soquetes de rede) para o sistema de arquivos fornecido (a parte 2>/dev/null elimina algumas informações desnecessárias). Você pode deduzir apenas desses PIDs cujo processo está preenchendo seu sistema de arquivos. Pesquise os processos com:

ps -ef | grep $pid

Você também pode tentar executar este comando que lhe dará ainda mais detalhes (e ajudar a identificar arquivos abertos sem nome de arquivo correspondente no disco - eu mencionei isso acima):

sudo lsof $file_system | grep $directory_filling_up

... e se você identificou um PID suspeito do comando fuser , você pode fazer isso:

sudo lsof -p $pid

O problema com fuser e lsof é que eles apenas fornecem um instantâneo do sistema no momento em que você executa o comando. Se o processo ofensivo não estiver escrito quando você executá-los, você está sem sorte. Você pode contrariar isso executando-os repetidamente ao longo do tempo e salvando a saída. Isso exigirá a leitura da saída para encontrar padrões ou a criação de um programa para você. Uma alternativa é usar uma ferramenta como SystemTap . O SystemTap permite capturar todos os tipos de informações úteis e é "programável". Ele ainda vem com alguns exemplos de arquivos de origem que permitem que você veja quais processos estão gravando em quais arquivos em algum período de tempo. Seria perfeito, mas é uma ferramenta avançada e requer muito conhecimento sobre Linux.

Depois de identificar o (s) processo (s) ofensivo (s), você pode matar (e talvez reiniciá-los). Se o processo estiver associado ao sistema operacional ou a algum software bem empacotado, provavelmente haverá um mecanismo para reiniciá-los, mas dependerá da distribuição do Linux (acho que o Ubuntu permitirá que você execute algo como /etc/init.d/$init_script restart , mas você Terei que verificar a documentação da sua distro). Caso contrário, você pode eliminá-lo com kill $pid ou kill -9 $pid se não estiver se comportando. Tenha cuidado ao observar como o processo estava sendo executado (por exemplo, quais eram os argumentos mostrados em ps -ef ) caso você precise reiniciá-lo (talvez seja necessário consultar a documentação desse software).

    
por 17.06.2010 / 23:38
5

Use du para rastrear o diretório que contém o (s) arquivo (s) que estão preenchendo o disco.

cd /
du -h --max-depth 1

mostrará qual diretório / usa mais espaço. Atravessar o sistema de arquivos executando o comando du para encontrar o culpado.

por exemplo.

cd /
du -h --max-depth 1

mostra que o / usr é o 2.3G do 3.5G usado no sistema.

cd /usr
du -h --max-depth 1

mostra que / usr / lib usa 1.1G do 2.3 em / usr ...

Isso também pode ser causado por um arquivo aberto que foi excluído.

Você pode usar o lsof para encontrar arquivos abertos, mas desvinculados (excluídos)

lsof +L1

deve fazer o truque. Como a página man afirma:

A specification of the form +L1 will select open files that have been unlinked. A specification of the form +L1 <file_system> will select unlinked open files on the specified file system.

    
por 07.10.2013 / 20:02
3

Algo está preenchendo a partição /. Provavelmente é algo em /var/log ou em /home . Isso depende da sua configuração. Procure também em locais onde seus usuários tenham acesso.

Execute o seguinte comando em cada um dos diretórios em questão. Isso mostrará os subdiretórios que são os maiores consumidores de espaço.

cd /directory
du -cks -x * .* |sort -n

Esta ideia é emprestada do script ducks ( du -cks ) de Linux Server Hacks da O'Reilly . Eu corro esse comando com frequência.

Na minha experiência, isso é quase sempre devido a arquivos de log grandes e crescentes. Nesse caso, use Logrotate e certifique-se de usar a compactação . Usando a compactação gzip com a taxa de compactação padrão, seus arquivos de log ficarão menores em 80-95% (as mensagens de 1 GB / var / log / podem ser facilmente compactadas para 200 MB ou menos). Isso coloca uma quantidade moderada de carga na CPU, mas eu raramente vi isso impactar no desempenho real de um servidor. Algumas pessoas preferem usar a compactação Bzip2 ou usar gzip --best , mas, na minha experiência, isso causa muita sobrecarga da CPU com pouco benefício adicional. gzip com a taxa padrão geralmente é bom o suficiente.

E, obviamente, esse problema é, às vezes, devido a um usuário fazer coisas ruins. Use o comando du acima para encontrar o culpado.

    
por 16.06.2010 / 21:04
1

Eu usaria o comando du para ver quais diretórios estão ocupando mais espaço, o que deve sugerir quais programas estão usando esse espaço. Se você pode rodar aplicativos gráficos, existem alguns bons que vão ajudar a resumir a saída de du, como o KDirStat.

    
por 16.06.2010 / 21:06
1

O provável culpado é os logs, mas aqui está um comando que classificará arquivos modificados recentemente (ou criados) por tamanho:

D=$(date --rfc-3339 date);
sudo sh -c 'find / -xdev -mtime -1 -type f -print0 |xargs -0 du -0sbc' \
  |tee ~/recent-files.$D |sort -zn |tee ~/recent-by-size.$D |xargs -0n1

Você pode executar este comando diariamente; provavelmente há uma maneira de fazer algo com o SQL-ish para classificar esses arquivos por crescimento diário.

(edit) Para monitorar o crescimento, use gt5

sudo aptitude install gt5
cd /
gt5

Um dia depois; procure por ± sinais

gt5
    
por 16.06.2010 / 22:10
0

Arquivos de log podem estar enchendo seu disco rígido. Use logrotate para parar isso.

    
por 16.06.2010 / 20:43
0

Obrigado a todos por sua ajuda

Acontece que o culpado era uma pasta .recycler oculta em cada um dos diretórios compartilhados que estava oculta.

Se você fizer um ls -a , poderá vê-los.

    
por 17.06.2010 / 16:39