Solaris 11에 디스크 수준 캐싱이 있습니까?

Solaris 11에 디스크 수준 캐싱이 있습니까?

iSCSI 디스크가 있습니다./dev/rdsk/c5t6d0

다음 위치에 파티션(UEFI 레이블이 있는 슬라이스)을 만들었습니다./dev/rdsk/c5t6d0s0

이제 슬라이스에 일부 데이터를 씁니다.

echo "xyxyxyxyxyxyxyxyxyxyxyxyxyxyxyxyxyxyxyxyxyxyxyxyxyxyxyxyxyxy" >/text
dd if=/text of=/dev/dsk/c5t6d0s0

디스크 내용을 덤프하면 UEFI 레이블과 오프셋 0x5000에 데이터도 표시됩니다.

dd if=/dev/rdsk/c5t6d0 bs=512 | xxd
0000000: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000010: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000060: 0000 0000 0000 0000 0000 0000 0000 0000  ................
...
0000070: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000190: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001b0: 0000 0000 0000 0000 0eb5 7760 0000 00ff  ..........w`....
00001c0: ffff eeff ffff 0100 0000 ff3f 0300 0000  ...........?....
00001d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f0: 0000 0000 0000 0000 0000 0000 0000 55aa  ..............U.
0000200: 4546 4920 5041 5254 0000 0100 5c00 0000  EFI PART....\...
0000210: 7187 d278 0000 0000 0100 0000 0000 0000  q..x............
0000220: ff3f 0300 0000 0000 2200 0000 0000 0000  .?......".......
0000230: de3f 0300 0000 0000 fd59 3d67 51a0 4d13  .?.......Y=gQ.M.
0000240: abdd a5e8 8251 c7ac 0200 0000 0000 0000  .....Q..........
0000250: 8000 0000 8000 0000 7e8c 8e06 0000 0000  ........~.......
0000260: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000270: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000280: 0000 0000 0000 0000 0000 0000 0000 0000  ................
...
0005000: 7879 7879 7879 7879 7879 7879 7879 7879  xyxyxyxyxyxyxyxy
0005010: 7879 7879 7879 7879 7879 7879 7879 7879  xyxyxyxyxyxyxyxy
0005020: 7879 7879 7879 7879 7879 7879 7879 7879  xyxyxyxyxyxyxyxy
0005030: 7879 7879 7879 7879 7879 7879 0ab6 db6d  xyxyxyxyxyxy...m
0005040: 6db6 db6d 6db6 db6d 6db6 db6d 6db6 db6d  m..mm..mm..mm..m
0005050: 6db6 db6d 6db6 db6d 6db6 db6d 6db6 db6d  m..mm..mm..mm..m
0005060: 6db6 db6d 6db6 db6d 6db6 db6d 6db6 db6d  m..mm..mm..mm..m
0005070: 6db6 db6d 6db6 db6d 6db6 db6d 6db6 db6d  m..mm..mm..mm..m
0005080: 6db6 db6d 6db6 db6d 6db6 db6d 6db6 db6d  m..mm..mm..mm..m
0005090: 6db6 db6d 6db6 db6d 6db6 db6d 6db6 db6d  m..mm..mm..mm..m

하지만 스토리지 측(iSCSI 대상)에서 동일한 덤프를 수행하면 기록된 데이터가 표시되지 않습니다! 나일시 휴업SPARC/solaris 시스템 및짜잔!이제 데이터가 거기에 있습니다.

어떻게 이럴 수있어? Solaris가 내 데이터를 메모리에 캐시하고 있습니까? 이 기능을 어떻게 비활성화할 수 있나요?

참고 1: 사용하려고 했지만 sync도움이 되지 않았으며 어쨌든 내 시나리오에는 없는 파일 시스템의 파일과 관련되어 있습니다.

참고 2: 내 컴퓨터는 Solaris 11.3이 설치된 T5220 UltraSPARC T2 서버입니다.

참고 3: '스토리지'는 로컬 디스크 백업 저장소에 iSCSI 대상이 있는 Ubuntu 서버입니다.

답변1

dsk버퍼링된 블록 장치( )에 쓰고 있습니다 . 버퍼를 우회하려면 원시 장치( rdsk, 참조) 에 직접 쓸 수 있습니다.유닉스 시스템의 문자 특수 파일과 블록 특수 파일은 무엇입니까?) 다음을 실행하여:

dd if=/text of=/dev/rdsk/c5t6d0s0

하지만 성공하려면 파일 /text크기가 정확히 블록 크기의 배수여야 합니다 .dd

또는 문자 장치를 계속 사용할 수 있지만 dd출력을 동기화하도록 지시할 수 있습니다.

dd if=/text of=/dev/dsk/c5t6d0s0 conv=sync

또는 고정 너비 출력 레코드를 원하는 경우:

dd if=/text of=/dev/rdsk/c5t6d0s0 cbs=512 conv=sync,block

관련 정보