[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: