С sed
:
sed '/CCSID/ { s/ CHAR(/ NCHAR(/; s/ VARCHAR(/ NVARCHAR2(/ }' file
CCSID
. Затем вступает в силу часть внутри {...}
.
s/ CHAR(/ NCHAR(/;
заменяет CHAR(
(с ведущим пробелом) на NCHAR(
. s/ VARCHAR(/ NVARCHAR2(/
и заменяет VARCHAR(
на NVARCHAR2(
. So how do I replace a fresh writable root subvolume from a received snapshot?
Вы не можете.
В вашем случае верхний -уровень (корневой )подтом (с идентификатором 5 )является /
вашей файловой системы Linux; Ничто не может существовать рядом с ним. Как вы обнаружили, btrfs-receive
создает подтом -только для чтения, поэтому вам нужно создать подтом для чтения -записи моментального снимка из только одного чтения -, и для этого вам понадобится чтобы иметь возможность создать подтом за пределами /
; Следовательно, почему вы не можете заменить подтом верхнего уровня -.
Обратите внимание, что вы сказали:
I have created a readonly snapshot of the fs I want to convert first and started sending it into a subvolume in another fs.
Однако вы создали доступный -только для чтения моментальный снимок подтома , а не файловой системы BTRFS в целом. Я не понимаю, как вы сможете создать снимок верхнего -уровня. Странный.
Лучше всего использовать такой инструмент, как partclone
, для резервного копирования всей файловой системы и последующего восстановления из нее. В противном случае вам придется изменить макет подтома с плоского , который у вас есть, на вложенный . С вложенным макетом у вас будет что-то вроде этого:
/ (top-level)
|
|__ /rootfs (subvolume)
| |
| _/home
|
|__ /rootfs-backup (read-only subvolume, which you can delete later)
| |
| _/home
Вложенный макет дает вам возможность создавать моментальные снимки любого подтома в файловой системе (, кроме верхнего -уровня, который вам в любом случае не понадобится ). Тогда вы просто смонтируете подтом rootfs
на /
вместо всей файловой системы. Например:mount -t btrfs /dev/sda1 -o defaults,subvol=/rootfs