Не удалось найти файл. Это другое сообщение об ошибке; сравните сcat /does-not-exist
(на самом деле cat
не найдя,не оболочка )илиecho > /path/does/not/exist
(оболочка не находит ее):
$ echo > /path/does/not/exist
bash: /path/does/not/exist: No such file or directory
Скорее всего, вместо этого вы получите ENODEV
или ENXIO
, см.man 2 open
.strace
(по делу cat
)мог бы вам точно сказать. Здесь я получаюENXIO
:
$ ls -l 3
lrwx------. 1 anthony anthony 64 Sep 10 17:39 3 -> 'socket:[11714498]'
$ strace -e open,openat -f cat 3
⋮
openat(AT_FDCWD, "3", O_RDONLY) = -1 ENXIO (No such device or address)
⋮
Я бы попробовал с dd
и oflag=direct status=progress
. Имейте в виду, что это может стать медленным.
Попробуйте:
dd oflag=direct status=progress bs=16M if=file.bin of=/dev/sdb1
Работа должна быть выполнена, как задумано.
sync
сwatch-flush
Вы можете жить с кэшированием, но следите за ним. В конце концов, есть причина, по которой он используется, и вы теряете часть эффективности, когда отключаете его.
Одним из способов является запуск сброса буфера (с )с помощью sync
, когда процесс записи завершен, и отслеживание размера буферов. Я использую шелл-скрипт watch-flush
для контроля размера буферов, «грязных» данных, как указано в grep Dirty: /proc/meminfo
, и когда sync
заканчивается, вы знаете, что данные полностью записаны на диск.
Вы можете найти watch-flush
среди шелл-скриптов, принадлежащихmkusb , и вы можете использовать его как есть, модифицировать его или просто позаимствовать концепцию и создать свой собственный инструмент.
dd
сfsync
Альтернативой, если вы хотите использовать dd
, является использование conv=fsync
в соответствии с
При записи ISO-образа на USB-накопитель с помощью dd, как я узнаю, что могу извлечь флешку?