
У меня есть диск 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 target), я не увижу, что мои данные записаны! Янеисправностьмашина SPARC/Solaris ивуаля!данные теперь есть.
Как это может быть? Solaris кэширует мои данные в памяти? Как это отключить?
Примечание 1: Я пробовал использовать , sync
но это не помогло, и в любом случае это связано с файлами в файловой системе, которой в моем сценарии нет.
Примечание 2: Мой компьютер — сервер T5220 UltraSPARC T2 с Solaris 11.3.
Примечание 3: «storage» — это сервер Ubuntu с iSCSI-target на локальном диске.
решение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