.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2016, Oracle. All rights reserved. .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH ioctl_fideduperange 2 "31 октября 2023 г." "Linux man\-pages 6.06" .SH ИМЯ ioctl_ficlonerange \- сделать некоторые данные одного файла общими с другим файлом .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP /* Definition of \fBFIDEDUPERANGE\fP and \fB FILE_DEDUPE_* \fPconstants\fB*/\fP \fB#include \fP .P \fBint ioctl(int \fP\fIsrc_fd\fP\fB, FIDEDUPERANGE, struct file_dedupe_range *\fP\fIarg\fP\fB);\fP .fi .SH ОПИСАНИЕ Если файловая система поддерживает общее файловое физическое хранилище между несколькими файлами, то эту операцию \fBioctl\fP(2) можно использовать для того, чтобы часть данных файла \fIsrc_fd\fP появилась в файле \fIdest_fd\fP в виде общего пространства на носителе, если данные файлов одинаковы («дедупликация», deduplication). Оба файла должны располагаться в одной файловой системе. Это сокращает затраты на место, позволяя хранить в файловой системе только одну копию данных.Если выполняется запись в эту общую область, то файловая система должна гарантировать, что изменения будут видны только в файле, в который производится запись. Такое поведение часто называют как «копирование при записи» (copy on write). .P Данный ioctl выполняет операцию «сравнения и создания общей области при совпадении» с не более \fIsrc_length\fP байт из файлового дескриптора \fIsrc_fd\fP по смещению \fIsrc_offset\fP. Данная информация передаётся в структуре следующего вида: .P .in +4n .EX struct file_dedupe_range { __u64 src_offset; __u64 src_length; __u16 dest_count; __u16 reserved1; __u32 reserved2; struct file_dedupe_range_info info[0]; }; .EE .in .P Дедупликация атомарна для одновременной записи, поэтому для получения корректной дедуплицированной копии не нужно получать блокировки. .P Поля \fIreserved1\fP и \fIreserved2\fP должны быть равны нулю. .P Назначения для операции дедупликации передаются в массиве в конце структуры. Количество назначений задаётся в \fIdest_count\fP, а информация о назначении задаётся в следующем виде: .P .in +4n .EX struct file_dedupe_range_info { __s64 dest_fd; __u64 dest_offset; __u64 bytes_deduped; __s32 status; __u32 reserved; }; .EE .in .P Целью каждой операции дедупликации является \fIsrc_length\fP байт в файловом дескрипторе \fIdest_fd\fP со смещением \fIlogical_offset\fP. Поле \fIreserved\fP должно быть равно нулю.На момент вызова \fIsrc_fd\fP должен быть открыт на чтение и, \fIdest_fd\fP должен быть открыт на запись. Сумма размеров структуры \fIfile_dedupe_range\fP и массива структур \fIfile_dedupe_range_info\fP не должна превышать системный размер страницы. Максимальный размер \fIsrc_length\fP зависит от файловой системы и, обычно равен 16\~МиБ. Это ограничение будет невидимо соблюдаться файловой системой. По соглашению, хранилище, используемое \fIsrc_fd\fP, отображается в \fIdest_fd\fP, а предыдущее содержимое в \fIdest_fd\fP освобождается. .P При успешном выполнении ioctl в \fIbytes_deduped\fP возвращается количество дедуплицированных байт, а в \fIstatus\fP — код состояния операции дедупликации. Если не совпадает даже один байт из диапазона, то запрос дедупликации будет проигнорирован и \fIstatus\fP будет присвоено \fBFILE_DEDUPE_RANGE_DIFFERS\fP. При успешном выполнении код \fIstatus\fP изменяется на \fBFILE_DEDUPE_RANGE_SAME\fP, при ошибке — отрицательное значение кода, или \fBFILE_DEDUPE_RANGE_DIFFERS\fP, если данные не совпадают. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" В случае ошибки возвращается \-1, а \fIerrno\fP устанавливается в значение ошибки. .SH ОШИБКИ Possible errors include (but are not limited to) the following: .TP \fBEBADF\fP Дескриптор \fIsrc_fd\fP не открыт на чтение; \fIdest_fd\fP не открыт на запись или открыт только для добавления; файловая система, в которой находится \fIsrc_fd\fP, не поддерживает дедупликацию. .TP \fBEINVAL\fP Файловая система не поддерживает дедупликацию диапазонов в заданных файлах. Эта ошибка также может возникнуть, если файловый дескриптор представляет устройство, FIFO или сокет. Обычно, для дисковых файловых систем требуются, чтобы аргументы смещения и длины были выровнены по основному размеру блока. В XFS и Btrfs нет поддержки дедупликации перекрывающихся диапазонов в одном и том же файле. .TP \fBEISDIR\fP Один из файлов является каталогом и файловая система не поддерживает диапазоны для каталогов. .TP \fBENOMEM\fP Ядро не смогло выделить достаточно памяти для выполнения операции или размер \fIdest_count\fP слишком большой из\-за того, что описание входного аргумента занимает больше одной страницы в памяти. .TP \fBEOPNOTSUPP\fP Может возникать, если файловая система не поддерживает дедупликацию для файловых дескрипторов или когда файловый дескриптор ссылается на специальные иноды. .TP \fBEPERM\fP Дескриптор \fIdest_fd\fP является неизменным. .TP \fBETXTBSY\fP Один из файлов является файлом подкачки. Файлы подкачки не могут содержаться в совместных хранилищах. .TP \fBEXDEV\fP Дескрипторы \fIdest_fd\fP и \fIsrc_fd\fP находятся на разных смонтированных файловых системах. .SH ВЕРСИИ Некоторые файловые системы имеют ограничение на количество данных, которое может быть дедуплицировано за один вызов. .SH СТАНДАРТЫ Linux. .SH ИСТОРИЯ Linux 4.5. .P It was previously known as \fBBTRFS_IOC_FILE_EXTENT_SAME\fP and was private to Btrfs. .SH ЗАМЕЧАНИЯ Так как для операции копирования\-при\-записи требуется выделение нового пространства в хранилище, операция \fBfallocate\fP(2) может отменить совместное использование общих блоков для гарантии того, что последующие операции записи не завершатся ошибкой из\-за нехватки места на диске. .SH "СМ. ТАКЖЕ" \fBioctl\fP(2) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Azamat Hackimov , Dmitriy S. Seregin , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .