Какое распределение вероятностей моделирует это состояние гонки?

(предупреждение: это очень опасно, если вы не знаете, что делаете)

Да, можете, но я не рекомендую (хотя я делал это несколько раз, в основном для переноса раздела на другой). HDD).

dd if=/dev/sdaA of=/dev/sdaB

перенесет данные из sdaA в sdaB , но проверка не будет выполняться, весь раздел будет скопирован (даже пустое пространство), вы должны быть уверены, что sdaB больше или равно sdaA (в противном случае вы перезапишете начало следующего раздела), и система, скорее всего, не загрузится - вам придется загрузиться с аварийного компакт-диска / USB, смонтируйте / dev / sdaB , измените конфигурацию grub и повторно запустите grub-install. И при необходимости измените размер файловой системы, чтобы освободить оставшееся пространство.

Намного лучше создать файловую систему на / dev / sdaB и скопировать содержимое файловой системы. Вам все равно придется повторно запустить grub-install , но, по крайней мере, это намного безопаснее.

10
10.08.2018, 21:39
1 ответ

Это очень любопытно, поэтому я попытался исследовать его с помощью 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. Они определенно чередуются, так что да, как и предполагалось, все дело во времени выполнения (, и я представляю себе переключение контекста )двух команд.

1
27.01.2020, 20:03

Теги

Похожие вопросы