С 5 октября 2011 (спустя 8 дней после того, как этот вопрос был отправлен) Citrix предоставляет 64-разрядному клиенту в .deb и .rpm форматах.
Rsync имеет код, который конкретно проверяет, является ли файл усеченным во время чтения и дает эту ошибку — ENODATA
. Я не знаю почему файлы в /sys
имейте это поведение, но так как они не реальные файлы, я предполагаю, что это не слишком удивительно. Кажется, нет способа сказать rsync пропускать эту конкретную проверку.
Я думаю, что Вы, вероятно, более обеспечены не rsyncing /sys
и с помощью определенных сценариев, чтобы избирательно подойти к выбору особой информации Вы хотите (как адрес сетевой платы).
Прежде всего /sys
псевдо файловая система. Если Вы смотрите на /proc/filesystems
Вы найдете список зарегистрированных файловых систем, где довольно многие имеют nodev
впереди. Это указывает, что они - псевдо файловые системы. Это означает, что они существуют на рабочем ядре как основанная на RAM файловая система. Далее они не требуют блочного устройства.
$ cat /proc/filesystems
nodev sysfs
nodev rootfs
nodev bdev
...
При начальной загрузке ядро монтирует эту систему, и обновляет записи при удовлетворении. Например, когда новые аппаратные средства найдены во время начальной загрузки или udev
.
В /etc/mtab
Вы обычно находите монтирование:
sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
Поскольку хорошая статья о предмете считала Patric Mochel – sysfs Файловая система.
Если Вы входите в каталог под /sys
и сделайте a ls -l
Вы заметите, что все файлы имеют один размер. Обычно 4 096 байтов. Этим сообщают sysfs
.
:/sys/devices/pci0000:00/0000:00:19.0/net/eth2$ ls -l
-r--r--r-- 1 root root 4096 Apr 24 20:09 addr_assign_type
-r--r--r-- 1 root root 4096 Apr 24 20:09 address
-r--r--r-- 1 root root 4096 Apr 24 20:09 addr_len
...
Далее можно сделать a stat
на файле и уведомлении другая отличная функция; это занимает 0 блоков. Также inode корня (статистика/sys) равняется 1. /stat/fs
обычно имеет inode 2. и т.д.
Самое легкое объяснение rsync отказа синхронизации псевдо файлов, возможно, примером.
Скажите, что нам назвали файл address
это составляет 18 байтов. ls
или stat
из файла сообщает о 4 096 байтах.
read_size == 4096
nread == 18
read_size = read_size - nread (4096 - 18 = 4078)
nread == 0
, строка 2554096
байты. Нуль буферизует.ENODATA
.Во время этого процесса это на самом деле читает весь файл. Но без размера, доступного, это не может проверить результат – таким образом, отказ является только опцией.
Проверьте, будет ли файл, вероятно, редок. Это - файл, имеет дыры и т.д.
copy.c:1010
/* Use a heuristic to determine whether SRC_NAME contains any sparse
* blocks. If the file has fewer blocks than would normally be
* needed for a file of its size, then at least one of the blocks in
* the file is a hole. */
sparse_src = is_probably_sparse (&src_open_sb);
Как stat
файл отчетов, чтобы иметь нулевые блоки это категоризировано как редкое.
Попытки считать файл копией степени (более эффективный способ скопировать нормальные редкие файлы), и сбои.
18446744073709551615
байты в системе на 32 бита.Мог бы быть связан, но расширился, вызовы атрибута перестанут работать на sysfs:
[root@hypervisor eth0] # lsattr адрес
lsattr: Несоответствующий ioctl для устройства При чтении флагов на адресе
[root@hypervisor eth0] #
При рассмотрении моего strace, на который это похоже, rsync пытается вытянуть в расширенных атрибутах по умолчанию:
22964 <... getxattr возобновленный>, 0x7fff42845110, 132) =-1 ENODATA (Никакие доступные данные)
Я пытался найти, что флаг дает rsync, чтобы видеть, если пропуск расширенных атрибутов решает вопрос, но не смог найти что-либо (--xattrs
включает их в месте назначения).
Rsync normalmente lee la información del archivo, transfiere el contenido del archivo o delta a un archivo temporal en el directorio de destino, luego, después de verificar los datos del archivo, lo renombra al nombre del archivo de destino.
Creo que el problema con sysfs es que todos los archivos se muestran como 4k (una página de memoria )pero pueden contener solo unos pocos bytes. Para evitar copiar un archivo potencialmente dañado en el destino, rsync cancela la copia cuando detecta una discrepancia entre los metadatos del archivo y lo que realmente se copió.
Al menos en rsync v3.0.6, este comportamiento se puede evitar usando el interruptor --inplace
. Rsync aún detectará errores, pero dado que los archivos de destino ya se habrán sobrescrito cuando lo haga, dejará los archivos potencialmente corruptos allí.
Sin embargo, tenga en cuenta que un efecto secundario es que los archivos terminan siendo cero -rellenados a 4k, ya que este es el tamaño que rsync cree que tienen los archivos. No debería marcar la diferencia en la mayoría de los casos, ya que los bytes nulos generalmente se ignoran.