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,請參閱UNIX 系統中的字元特殊檔案和區塊特殊檔案是什麼?)透過運行:

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

相關內容