나는 여기 ext4lazyinit에 대해 질문했다 . 내가 읽고 이해 한 모든 것에서 파일 시스템에 대한 모든 inode를 만들지 않고도 간단히 hdd를 사용할 수 있습니다.
알고 있거나 측정 할 수있는 유일한 방법은에서 모니터링하는 것 ext4lazyinit
입니다 iotop
. 진행률을 백분율로 얻는 방법이 있습니까?
나는 여기 ext4lazyinit에 대해 질문했다 . 내가 읽고 이해 한 모든 것에서 파일 시스템에 대한 모든 inode를 만들지 않고도 간단히 hdd를 사용할 수 있습니다.
알고 있거나 측정 할 수있는 유일한 방법은에서 모니터링하는 것 ext4lazyinit
입니다 iotop
. 진행률을 백분율로 얻는 방법이 있습니까?
답변:
이 패치 토론을 확인하십시오 . lazyinit없이 시스템을 초기화 할 수는 있지만 측정 할 수는 없습니다. 기다릴 시간이 있으면 기다리십시오. 토론에서 패치를 시도 할 수 있지만 패치 워크에 따르면 "거부 됨"상태입니다.
ext4lazyinit의 진행 상황을 근사화하는 방법을 찾은 것 같습니다.
TL; DR : 아래 스크립트를 참조하십시오 .
이 방법은 파티션이 처음으로 마운트 된 이후로 디스크 연결이 끊어지지 않았으며 (또는 시스템이 다시 부팅되지 않았으며) 사용중인 파티션에 정확히 많은 양의 데이터를 기록했다고 가정합니다 (삭제 없음) 또는 파일 수정).
1 단계 : fdisk의 파티션 크기 (kiB로 변환)를 df에 표시된 1K 블록 수와 비교합니다. (파티션 크기 (kiB))에서 (1K 블록 수)를 빼서 (노드 테이블의 대략 크기) 가져옵니다.
편집 : 예, fdisk :
Sector size (logical/physical): 512 bytes / 4096 bytes
(...omitted...)
Device Start End Sectors Size Type
/dev/sdd1 2048 11720978398 11720976351 5.5T Linux filesystem
df :
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/workbackup 5813233164 1217095176 4596121604 21% /mnt/backup_work
11720976351 섹터 * 512 바이트 / 섹터 / 1024 = 5860488175.5 kiB (fdisk와 같이 5.5TiB 거의) 마이너스 df의 5813233164는 대략적인 inode 테이블 크기에 대해 47255011.5 kiB (약 45 GiB)입니다.
2 단계 : 가져 오기 (파티션에 작성된 총 kiB) :
awk '{ print $3"\t"$10 }' /proc/diskstats
파티션에 맞는 줄을 골라 kiB로 변환하십시오.
편집 : 예 :
sdb 260040
sdb1 260040
sdd 2530109116
sdd1 2530108940
필자의 경우 sdd1을 사용하여 쓴 총 kiB = 2530108940 섹터 * 512 바이트 / 섹터 / 1024 = 1265054470 kiB (약 1.2 TiB).
3 단계 : 파일 시스템에 데이터를 이미 쓴 경우에만 필요합니다. (파티션에 쓴 총 kiB)에서 (inode 테이블에 쓴 대략 kiB)에서 (df에 표시된 1K- 블록 USED 수)를 뺍니다.
편집 : 예 : inode 테이블에 기록 된 대략적인 kiB = 1265054470 (2 단계에서)-1217095176 (1 단계의 df 출력 참조) = 47959294 kiB (45.7 GiB)
4 단계 : (inode 테이블에 쓴 대략 kiB)를 (kiB에있는 대략 inode 테이블의 크기)로 나누고 100을 곱하여 진행률을 백분율로 가져옵니다.
편집 : 예 : 대략적인 진행률 = 47959294 / 47255011.5 * 100 % = 101.5 %
스크립트
또는 부분 스크립트로 작성하십시오 (안전상의 이유로 fdisk 호출을 스크립팅하는 것을 거부합니다).
let sectorsize=$(cat /sys/block/sda/queue/hw_sector_size)
let partsize=$2*$sectorsize/1024
let fssize=$(df -- "$3" | tail -n -1 | awk '{print $2}')
let approxinodetablesize=$partsize-$fssize
let tkw=$(awk "/$1/"' {print $10}' /proc/diskstats | head -n 1)*$sectorsize/1024
let used=$(df -- "$3" | tail -n -1 | awk '{print $3}')
let tkw_inodetable=$tkw-$used
echo "Approximate progress: $(bc -l <<< "$tkw_inodetable*100.0/$approxinodetablesize") %"
$ 1 = "파티션 이름"(예 : sdd1), $ 2 = "fdisk에 따른 파티션 섹터", $ 3 = "슬래시가없는 마운트 포인트"로 호출
시험 결과
내 방법을 한 번만 테스트했습니다. 설정:
6TB 파티션
cryptsetup을 사용한 암호화
-m 0을 제외한 기본 매개 변수로 작성된 파일 시스템
ext4lazyinit가 완료되기 전에 파티션에 기록 된 파일 279GiB.
결과 : 완료시 99.7 %의 판독 값 :-)
편집 : 거의 다른 TiB 데이터를 쓴 후 동일한 디스크로 추정치가 101.5 %입니다. 유용 할 정도로 정확하다고 생각합니다.