두 도구가 서로 다른 block
측정기준을 보고하는 것 같습니다.
root@ubuntu-xenial:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 498588 0 498588 0% /dev
tmpfs 101584 3116 98468 4% /run
/dev/sda1 10098468 1438288 8643796 15% /
tmpfs 507916 0 507916 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 507916 0 507916 0% /sys/fs/cgroup
vagrant 343946960 55977016 287969944 17% /vagrant
tmpfs 101584 0 101584 0% /run/user/1000
root@ubuntu-xenial:~# dumpe2fs /dev/sda1 | grep -i block | grep -i size
dumpe2fs 1.42.13 (17-May-2015)
Block size: 4096
Flex block group size: 16
게다가 fdisk
명령은 서로 다른 sector
크기를 보고합니다( sector
및 용어는 block
서로 바꿔 사용할 수 없나요?)
root@ubuntu-xenial:~# fdisk -l
Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x38d40272
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 20971486 20969439 10G 83 Linux
Disk /dev/sdb: 10 MiB, 10485760 bytes, 20480 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
나는 vagrant
기계로 중요한 일을 한다
답변1
"df를 통해 블록 크기를 얻지" 않습니다. 이는 출력에 전혀 표시되지 않습니다.
df는 모든 파일 시스템, 해당 용도 및 마운트 지점을 하나의 목록에 나열합니다. 표시된 값은 파일 시스템 유형, 블록 크기 대기와 같은 다른 개별 속성이 아닌 크기(총/사용/사용 가능)만을 나타냅니다.
기본적으로 크기는 1K 블록으로 표시되며, 이를 1M 블록, 1G 블록 또는 변수(사람이 읽을 수 있음)로 변경할 수 있습니다.
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/dm-34 25155584 19811668 5343916 79% /
$ df --block-size=M
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/dm-34 24566M 19348M 5219M 79% /
$ df --block-size=G
Filesystem 1G-blocks Used Available Use% Mounted on
/dev/dm-34 24G 19G 6G 79% /
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/dm-34 24G 19G 5.1G 79% /
(미묘한 차이가 있습니다 -BG
. -h
사용 가능한 열 표시 6G
와 5.1G
사람이 읽을 수 있는 크기는 크기에 따라 조정되지만 청크 크기를 사용할 때는 분수 블록이 없습니다.)
파일 시스템의 경우 저장 장치처럼 512바이트 단위로 작동할 필요는 없습니다. 현재 많은 스토리지에 더 큰 섹터가 있지만 호환성상의 이유로 여전히 512바이트인 척합니다.
이 용어는 서로 바꿔 사용할
sector
수 없나요block
?
안타깝게도 이러한 용어는 상황에 따라 다른 방식으로 사용됩니다.
답변2
...다양한 섹터 크기를 보고합니다(섹터와 블록이라는 용어는 서로 바꿔서 사용할 수 없나요?)
"블록"은 다양한 의미로 사용되었습니다. 구체적인 맥락을 살펴봐야 합니다.
df
확장하면 "1K 블록"은 파일 시스템이 다른 블록 크기를 사용하더라도 1KB 단위를 의미합니다.
"섹터"는 원래 디스크에서 사용되는 블록 크기를 나타냅니다. 그러나 fdisk
"물리적" 및 "논리적"이라는 두 가지 유형의 섹터 크기를 보고했습니다. :-). 따라서 여기서도 문맥에 주의를 기울여야 합니다. [*]
파일 시스템 블록 크기는 얼마입니까?
당신이 언급한 첫 번째 도구는 df
및 dumpe2fs
이므로 아마도 파일 시스템 블록 크기를 찾고 있을 것 같습니다. 이 경우 dumpe2fs
"블록 크기"로 표시된 값이 필요합니다.
dumpe2fs
ext2/3/4 특정 도구이지만 이것이 가장 강력한 방법이라고 생각합니다. 즉, 다른 파일 시스템을 사용하는 경우 다른 도구를 사용하고 해당 시스템이 사용하는 "블록 크기"를 정확히 확인해야 함을 의미합니다.
일반 파일 시스템 블록 크기에는 몇 가지 예외가 있을 수 있습니다. 최근 ext4는 inode에서 인라인 데이터 저장을 지원할 수 있습니다. 즉, 특정 크기보다 작은 파일은 데이터 블록을 전혀 할당하지 않고도 파일의 inode에 저장할 수 있습니다. 바라보다새로운 Ext4 인라인 데이터 기능을 사용하는 방법은 무엇입니까? (inode에 직접 데이터 저장)
대체 쿼리 방법: statvfs()
또는 다음을 실행하여 루트 파일 시스템에 대한 정보를 stat -f /
표시 할 수 있습니다. statvfs()
여기에서 논의되었습니다:통계 파일 시스템 크기.
stat -f
출력에는 "Basic Block Size"와 "Block Size"라는 두 가지 필드가 포함됩니다. :-).
"기본" 블록 크기는 공간 사용량의 세분성입니다.보고서in - 이것이 적용됩니다 df
. 파일 공간을 할당하는 데 사용되는 것과 동일한 세분성을 원할 수 있습니다. 적어도 이는 ext2/3/4 및 기타 여러 경우에 해당됩니다.
stat
"빠른 전송"을 위해 다른 블록 크기가 사용될 것이라고 주장합니다. ext2/3/4에서 이 두 블록 크기는 항상 동일합니다.
ext2가 BSD UNIX의 UFS와 같은 조각화를 구현했다면 두 크기가 다를 수 있습니다. 이는 dumpe2fs
항상 "블록 크기"와 동일한 "조각 크기" 값을 표시하는 데 반영됩니다 . 바라보다f_bsize는 어디에 사용될 수 있나요? (st_blksize와 비슷합니까?)
보다 일반적인 도구로서 stat -f
일부 상황에서는 오해의 소지가 있을 수 있습니다.
또한 널리 사용되지는 않습니다. 이로 인해 위험이 증가할 수 있습니다. 두 가지 다른 값을 보고하는 것은 도움이 되지 않습니다. 원래 의미는 기본 Linux 파일 시스템과 관련이 없습니다. FWIW, 이 사이트의 사용자는 자신의 행동을 확인하라는 질문을 싫어합니다(위 링크). 나는 보통 이 질문에 대해 아무도 대답하는 방법을 모르기 때문에 화가 났음을 의미한다고 생각합니다.
stat -f
GNU coreutils의 기능입니다. (FreeBSD 7.2부터는 지원되지 않습니다 stat
).
"빠른 전송을 위한 블록 크기"가 의미가 있나요?
이 설명은 조각을 구현하는 파일 시스템과 관련될 수 있습니다. "지연 할당"을 구현하지 않는 경우 파일 길이가 늘어남에 따라 블록 크기의 쓰기 버퍼를 사용하는 것이 더 효율적일 수 있습니다. 언제나 그렇듯이, 성능 향상을 위해 변경을 고려하고 있다면 측정을 통해 개선 사항을 확인하는 것을 목표로 해야 합니다.
Linux 파일 시스템에서는 두 블록 크기가 모두 동일한 값입니다. 이 경우 특정 값으로 최적화해야 할 이유를 모르겠습니다.
대부분의 경우 사용자 공간은 "빠른 전송을 위해" I/O 호출 크기를 조정하는 것에 대해 크게 걱정할 필요가 없습니다. IO 스케줄러는 인접한 I/O를 결합하여 효율성을 향상시킬 수 있습니다. 페이지 캐시를 통한 비동기식 IO는 후기입 캐싱 및 자동 미리 읽기를 통해 엄청난 성능 이점을 얻습니다. 페이지 캐시 크기를 사용하거나 4KB를 하드코딩하는 것만으로도 큰 효과를 얻을 수 있습니다 :-).
대부분의 전송에서 페이지 캐시는 물리적 IO의 최소 크기를 지정합니다. 대부분의 시스템에서 페이지 크기는 4KB이며 일반적으로 파일 IO는 페이지 캐시를 통과합니다. (역시 작은 파일은 특수한 경우입니다. 또는 오히려 파일 크기가 4KB의 배수가 아닌 경우 파일의 마지막 페이지는 특수한 경우입니다.)
[*] 예를 들어 최신 추상화 계층에서는 4KB 물리적 섹터를 사용하는 최신 "고급 포맷" 디스크에서 "섹터 크기" 필드가 512로 보고되는 경우가 있습니다.
답변3
약간의 조사 끝에 블록 크기를 얻는 적절한 방법은 다음과 같다는 것을 알았습니다.
root@ubuntu-xenial:/proc# blockdev --getbsz /dev/sda
4096
물론 이는 블록 장치마다 다를 수 있습니다.
어쨌든 위의 값은 출력과 일치하는 것 같습니다.dumpe2fs