많은 디스크 공간을 즉시 채우거나 사용하는 방법은 무엇입니까?


45

Linux VM에서는 VM을 끄거나 가상 NIC의 연결을 끊는 것보다 NAGIOS 모니터링을 더 깊이 테스트하고 싶습니다. 여유 공간의 몇 %를 짧은 시간 동안 점유하여 디스크 공간 경보를 테스트하거나 시행하고 싶습니다.

난 그냥 사용할 수 있다는 것을 알고

dd if=/dev/zero of=/tmp/hd-fillup.zeros bs=1G count=50

또는 그와 비슷한 ...하지만 시간이 걸리고 시스템을로드하고 rm으로 테스트 파일을 제거 할 때 다시 시간이 필요합니다.

시스템을로드하지 않고 많은 시간이 걸리는 파티션을 채우는 가장 빠른 방법이 있습니까? 공간을 할당하지만 공간을 채우지 않는 것에 대해 생각하고 있습니다.


죄송합니다. >> ext3 파일 시스템이라는 것을 언급하지 않았습니다.
Axel Werner

fallocate를 지원하려면 ext4로 업그레이드해야합니다.
Rui F Ribeiro

1
우편 폭탄은 항상 작동
galois

1
@jaska 답을 만드십시오. 제목을 읽을 때 가장 먼저 얻은 아이디어는 ...
Crowley

왜 사용하지 /dev/full않습니까? (존재한다고 가정). echo 'test' > /dev/full데비안을 사용해보십시오 .
Ismael Miguel

답변:


63

Linux 시스템에서 파일을 만드는 가장 빠른 방법은 다음을 사용하는 것입니다 fallocate.

fallocate -l 50G file 

남자에서 :

fallocate는 파일을 할당 해제하거나 사전 할당하기 위해 파일에 할당 된 디스크 공간을 조작하는 데 사용됩니다.
fallocate 시스템 호출을 지원하는 파일 시스템의 경우 블록을 할당하고 초기화되지 않은 것으로 표시하여 데이터 블록에 대한 IO가 필요하지 않으므로 사전 할당이 신속하게 수행됩니다. 파일을 0으로 채워 파일을 만드는 것보다 훨씬 빠릅니다.
XFS (Linux 2.6.38부터), ext4 (Linux 3.0부터), Btrfs (Linux 3.7부터) 및 tmpfs (Linux 3.5부터)에서 지원됩니다.


1
왜 당신은 그것을 통해 실행 sudo합니까?
gerrit

1
@gerrit 답변에 해당 지점을 추가했습니다.
Rui F Ribeiro

3
" fallocate루트 권한이 필요합니다" 내 시스템이 아닙니다 (Linux Mint 17.3, 우분투의 다운 스트림, 따라서 데비안). (ext4에 파일 시스템)
TJ 크라우

1
OP는 파일 시스템이 ext3이라고 명시 적으로 언급했지만 +1입니다.
syneticon-dj

1
@RuiFRibeiro 감사합니다! sles11sp4의 경우 ive는 파일을 작성하고 ext4로 형식을 지정할 수 있었지만 RW 모드에서 마운트 할 수없는 위치에있었습니다. 나중에 / var / log / messages에서 ext4가 읽기 전용으로 만 지원된다는 커널 메시지를 발견했습니다. : /
Axel Werner

13

다른 대안은 다음과 같습니다.

  1. 경보 임계 값을 현재 사용량 근처 또는 아래로 변경하거나
  2. 제한된 inode, 크기 또는 기타 속성으로 매우 작은 테스트 파티션을 생성합니다.

루트 예약 백분율에 도달하는 것과 같은 것을 테스트 할 수 있으면 편리 할 수도 있습니다.


루트 예약 백분율 은 조정하지 않는 한 일반적 으로 10 %입니다. 큰 파티션 / 현대 디스크에서 너무 많은 시스템 낭비가 발생합니다. 알람을 정의 할 때는 이미이를 고려하는 것이 좋습니다.
Rui F Ribeiro

첫 번째 +1. 백 배 사실. 왜 실제로 머신 디스크에 무언가를 만들어야합니까? 테스트 할 때 코어 덤프, 대용량 임시 파일을 생성하는 배치 작업 등이 발생하고 디스크 전체가 실수로 소모되면 어떻게됩니까?
Fiisch

2
@Fisch-왜? 경고 임계 값이 정확하고 디스크 공간이없는 백분율 (이전에 본 적이 있음) 대신 실수로 inode가없는 백분율을 설정하는 것과 같은 작업을 수행하지 않도록합니다. 디스크를 경고 임계 값으로 채워서 문제가 발생하면 경고 임계 값이 너무 낮습니다. 경고의 요점은 문제가 발생 하기 전에 경고해야한다는 것입니다.
Johnny

고양이, 좋은 지적. 그러나 나를위한 해결책은 없습니다. VM 구성을 제어하거나 (파티션 또는 가상 디스크를 변경할 수 없음) NAGIOS 서버를 제어 할 수 없습니다.
Axel Werner

2
@AxelWerner 파일을 "가짜"참여로 루프백 마운트 할 수 있습니까? 그래도 심각한 영향을 미치지 않고 테스트 할 수 있습니다. 지원되는 파일 시스템 중 하나를 사용하여 포맷하면 fallocate를 사용할 수도 있습니다.
Tonny

9
  1. fallocate -l 50G big_file

  2. truncate -s 50G big_file

  3. dd of=bigfile bs=1 seek=50G count=0

이 세 가지 방법으로 파티션을 빠르게 채울 수 있습니다.

dd 사용을 좋아한다면 보통 seek로 시도 할 수 있습니다 . 그냥 설정 seek=file_size_what_you_need하고 설정하십시오 count=0. 그러면 시스템 에 파일 이 있고 크기 가 설정 한 크기 이지만 시스템은 실제로 파일을 만들지 않습니다. 이 방법으로 파티션 크기보다 큰 파일을 만들 수 있습니다.


예를 들어, 3G 미만 의 ext4 파티션에서 사용 가능합니다. dd 를 사용하여 메타 데이터로 존재하는 5T 파일을 작성 하십시오 . 블록 공간이 거의 필요하지 않습니다.

df -h . ; dd of=biggerfile bs=1 seek=5000G count=0 ; ls -log biggerfile ; df -h .

산출:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda9        42G   37G  2.8G  94% /home
0+0 records in
0+0 records out
0 bytes copied, 4.9296e-05 s, 0.0 kB/s
-rw-rw-r-- 1 5368709120000 Jun 29 13:13 biggerfile
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda9        42G   37G  2.8G  94% /home

1
답변에 정보를 더 추가 할 수 있습니까?
고양이

같은 질문을 다른 방식으로 검색하는 사람들을 위해 완성 된 질문에 더 많은 생각을 추가합니다. 그렇지 않다면 무엇을 무시하십시오.
호흡기 괜찮다

count=0방법은 매우 흥미 롭습니다. 예를 추가했습니다.
agc

7
dd위 의 예는 희소 파일을 할당 할 수 있습니다. 이 경우 파일 크기가 50G 인 경우 실제로는 블록 만 사용하거나 짝수는 아니므로 디스크가 가득 차지 않습니다. YMMV.
MAP

2
내 ext3 파일 시스템에 대한 제안을 테스트했습니다. 예상대로 작동하지 않았습니다. truncate와 dd는 파일 크기가 큰 파일을 만들었지 만 "df -h"가 인식하지 못했습니다. 여전히 같은 여유 HD 공간을 보여줍니다.
Axel Werner

0

다양한 Linux 기반 시스템에서 지원되는 stress-ng 도구를 활용할 수도 있습니다.

stress-ng --fallocate 4 --fallocate-bytes 70% --timeout 1m --metrics --verify --times
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.