(предупреждение: это очень опасно, если вы не знаете, что делаете)
Да, можете, но я не рекомендую (хотя я делал это несколько раз, в основном для переноса раздела на другой). HDD).
dd if=/dev/sdaA of=/dev/sdaB
перенесет данные из sdaA
в sdaB
, но проверка не будет выполняться, весь раздел будет скопирован (даже пустое пространство), вы должны быть уверены, что sdaB
больше или равно sdaA
(в противном случае вы перезапишете начало следующего раздела), и система, скорее всего, не загрузится - вам придется загрузиться с аварийного компакт-диска / USB, смонтируйте / dev / sdaB
, измените конфигурацию grub и повторно запустите grub-install. И при необходимости измените размер файловой системы, чтобы освободить оставшееся пространство.
Намного лучше создать файловую систему на / dev / sdaB и скопировать содержимое файловой системы. Вам все равно придется повторно запустить grub-install
, но, по крайней мере, это намного безопаснее.
Это очень любопытно, поэтому я попытался исследовать его с помощью strace. Запустите вашу команду в цикле 1000 раз:
mkdir {000..999}
for i in {000..999}; do
echo $i
(cd $i; strace -f -o trace.log bash -c 'bash -c "echo x; cat 1" | tee 1 >/dev/null'; )
done
Найден файл с наибольшим количеством строк(wc -l */1 | sort -nr | head -n2
)и проверен соответствующий trace.log
. Я, конечно, вижу много:
7567 <... read resumed> "x\n", 8192) = 2
7567 write(1, "x\n", 2) = 2
7567 write(3, "x\n", 2) = 2
7567 read(0, <unfinished...>
7568 read(3, "x\n", 131072) = 2
7568 write(1, "x\n", 2) = 2
7567 <... read resumed> "x\n", 8192) = 2
7567 write(1, "x\n", 2) = 2
7567 write(3, "x\n", 2) = 2
7567 read(0, <unfinished...>
7568 read(3, "x\n", 131072) = 2
7568 write(1, "x\n", 2) = 2
7567 <... read resumed> "x\n", 8192) = 2
7567 write(1, "x\n", 2) = 2
7567 write(3, "x\n", 2) = 2
7567 read(0, <unfinished...>
Где 7567 — это tee 1
, а 7568 — это cat 1
. Они определенно чередуются, так что да, как и предполагалось, все дело во времени выполнения (, и я представляю себе переключение контекста )двух команд.