Re: Копирование загрузчика?
On Sun, Jul 10, 2011 at 07:54:44PM +0400, Stanislav Maslovski wrote:
> On Sun, Jul 10, 2011 at 06:47:50PM +0600, Sergey Korobitsin wrote:
> > По моему, логика здесь простая. cp работает с файлами на уровне FS, и
> > когда я говорю "cp /dev/sda /dev/sdb", логично, что оно мне скопирует
> > эту device node с другим именем (а device node назначения затрёт).
>
> Нет, "cp /dev/sda /dev/sdb" так не действует. Так будет действовать
> "cp -a /dev/sda /dev/sdb".
>
> "cp /dev/sda /dev/sdb" при отсутствии ноды /dev/sdb создаст в /dev/
> обычный файл и скопирует в него содержимое блочного устройства. При
> наличии ноды /dev/sdb — затрет _содержимое_ блочного устройства
> /dev/sdb _содержимым_ /dev/sda.
Вот еще на эту тему: diff между (релевантной частью) вывода
"strace cp sda sdb" в двух ситуациях:
1) sda = нода блочного устройства, sdb = файл
2) sda = нода блочного устройства, sdb = нода блочного устройства
(перед началом копирования sda и sdb существуют на файловой системе)
===============================================================================================
-stat64("sdb", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
+stat64("sdb", {st_mode=S_IFBLK|0644, st_rdev=makedev(7, 0), ...}) = 0
stat64("sda", {st_mode=S_IFBLK|0644, st_rdev=makedev(7, 0), ...}) = 0
-stat64("sdb", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
+stat64("sdb", {st_mode=S_IFBLK|0644, st_rdev=makedev(7, 0), ...}) = 0
open("sda", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFBLK|0644, st_rdev=makedev(7, 0), ...}) = 0
open("sdb", O_WRONLY|O_TRUNC|O_LARGEFILE) = 4
-fstat64(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
+fstat64(4, {st_mode=S_IFBLK|0644, st_rdev=makedev(7, 0), ...}) = 0
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 32768) = 32768
write(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 32768) = 32768
read(3, " \0\0 `\0\0 \240\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 32768) = 32768
.....
===============================================================================================
т.е., принципиальной разницы для cp между этими двумя ситуациями нет:
в обоих случаях sdb открывается на запись с усечением, после чего тупо
копируются данные блоками по 32768 байт.
--
Stanislav
Reply to: