Если предположить, что ваш SSD работает быстрее для записи (а не только для чтения), то есть простой способ настроить это с помощью подсистемы RAID Linux. Предположим, вы собираетесь реплицировать / dev / sda1
(HDD) и / dev / sdb1
(SSD):
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 --write-mostly --write-behind=1024 /dev/sda1
- в основном запись
означает, что предыдущий устройства будут предпочтительнее для чтения, в то время как следующие устройства будут записывать только большую часть времени. - отложенная запись
означает, что устройствам, выполняющим большую часть операций записи, разрешено отставание; параметр определяет размер буфера записи. Возможно, вы захотите настроить параметр обратной записи в зависимости от производительности вашего компьютера.
Если вы хотите использовать существующий том , вы можете преобразовать его в RAID-1 с форматом суперблока 1.0 .
Накопители уже включают собственные проверки целостности, поэтому обычно нет особого смысла устанавливать еще один поверх. Основная проблема с отказом диска - это данные, которые становятся нечитаемыми, а не поврежденные. Я не знаю, какова относительная частота необнаруженных ошибок для SSD и HDD, но я подозреваю, что это примерно то же самое (и, следовательно, не SSD и HDD, а между конкретными устройствами), поэтому нет оснований предполагать, что данные считываются обратно с HDD точнее. Btrfs и ZFS имеют дополнительную проверку целостности на уровне файловой системы, если вы этого хотите.
В одну сторону с sed
:
sed -e '/^---/ {
:1
$!N
s/\n/ /
/---$/!b1
}' <file
Этот подход выполняет работу прямо:
---
, то введите блок кода1
N
ext строка входа, если текущая строка не является последней строкой $
n
пробелом---
, сломать !
цикл, в противном случае перезапустите цикл b1
Выполнение версии posix в соответствии с запросом в комментарии:
#!/bin/sh
jump=1
while IFS= read -r lin; do
case $lin in
----*)
jump=0
;;
*----)
jump=1
;;
esac
if [ "$jump" = "1" ]; then
printf '%s\n' "$lin"
else
printf '%s' "$lin "
fi
done <"$1"
Вызвать его:
./script file.txt >thedest.txt
Предположим, что ключевые строки также должны быть собраны в одну длинную строку:
sed '
:a
N
/\n-\|-\n/{
P
D
}
s/\n/ /
ta
' file
Вот еще один sed
:
sed '/^---/,/---$/{H;/^---/h;/---$/!d;x;s/\n/ /g;}' infile
он использует диапазон и буфер хранения. Он добавляет каждую строку в этом диапазоне в буфер удержания, перезаписывая ее, если это начало диапазона; он удаляет строку, если это не конец диапазона, иначе он обменивается буферами и заменяет все новые строки пробелами.
И другой подход с ed
:
ed -s infile <<\IN
?^---?,.-s/$/ /
?^---?,$j
1,/---$/-s/$/ /
1,/---$/j
w
q
IN
В нем используются четыре диапазона: сначала поиск выполняется в обратном направлении ( ed
начинается с конца файла) и добавляет пробел в конец каждой строки в первом диапазоне, а затем соединяет строки во втором диапазоне (которые на самом деле являются строками в первом плюс еще одна строка); затем он делает то же самое, но начиная с начала файла.