raid stripesize와 파일시스템 생성시 블럭사이즈는 무슨 차이가 있나요?

아히로나의 이미지

안녕하세요? 급 궁금한게 생겨서 질문 올립니다.

하드웨어로 레이드 할때 stripe사이즈를 고르는게 있죠 그것과

mkfs로 파일시스템 생성할떄 블럭사이즈 정하는것은 어떻게 다르고

각 각 하는 역할이 무엇인가요?

저는 막연하게 둘다 읽는범위고 같은 역할 인줄 알았는데 생각해보니

둘다 크기도 다르게 하고 생성을 했었더라고요

오늘도 도움 좀 부탁드리겠습니다.

항상 좋은 지식 얻어 가는것에 감사합니다.

chanik의 이미지

RAID는 볼륨을 만드는 데까지만 기여하고
파일시스템은 만들어진 볼륨 위에서 동작합니다.

(참고로, ZFS, Btrfs같은 파일시스템은 위의 원칙과 달리 파일시스템과 볼륨관리가 통합되어 있기는 합니다)

RAID로 볼륨을 만들때는 단지 빈터를 마련할뿐 그 볼륨에 어떤 파일시스템이 올라갈지는 신경쓰지 않습니다.
반대로 파일시스템은, 그냥 빈터가 있구나 할 뿐 해당 볼륨이 어떤 식으로 마련된 것인지 (non-RAID인지, RAID0/1/5... 인지 등) 신경쓰지 않죠.

stripe 사이즈는 RAID 볼륨의 생성 및 동작에만 영향을 주는 단위입니다.
파일시스템 블록사이즈는 파일시스템의 생성 및 동작에만 영향을 주는 단위이고요.

RAID stripe 사이즈와 파일시스템 블록사이즈는 같아도 되고 달라도 됩니다.
다만 동작성능상 더 나은 결과를 보이는 쪽으로 선택하고 싶을 것입니다.
어떻게 해야 더 성능이 좋은지에 대한 일반적인 원칙이 있는지는 모르겠네요.
아마 벤치마크(라고 쓰고 삽질이라고 읽는) 작업을 통해 결정하거나, 그냥 기본값으로 대충 쓰곤 하겠죠.

(덤으로 RAID 재료가 되는 하드디스크에는 또 sector size라는 나름대로의 단위가 있죠.
전에는 512바이트였다가 요즘은 4KB 짜리가 많이 나오는 추세입니다.
내부적으로는 4KB 섹터를 쓰지만 호환을 위해 외부에는 512바이트 섹터인척 해준다고 해서 512e 라 부르기도 합니다.
이런 요소도 성능상의 이슈를 만들 것입니다. 머리가 복잡해집니다)

앞서 언급한 ZFS, Btrfs의 경우,
볼륨과 파일시스템이 서로 유리되어 있는 전통적인 동작모델에서는 최선의 성능을 얻기가 어렵다고 판단하고
결국 볼륨관리기능(소프트웨어 RAID)을 파일시스템 속으로 통합하는 선택을 했습니다.

potatogim의 이미지

우선, RAID에서 말하는 stripe size는 각 chunk가 디스크에 분배되는 크기입니다.

예를 들어서 32k stripe size를 갖는 RAID가 있다면, 각 디스크는 32k의 연속된 데이터 공간을 사용하고, 한 공간의 다음 데이터는 다른 디스크에 저장됩니다.

이에 반해서 파일 시스템의 block size는 더 상위의 개념입니다.

결과적으로 block size가 RAID의 stripe size와 다르다면 단일 읽기 동작임에도 불구하고 RAID 컨트롤러는 여러 디스크에서 데이터를 읽어 들이게 됩니다.

Talk is cheap. Show me the code.

https://www.potatogim.net/