Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 28 Nov 2015 23:41:01 +0100
From:      Jilles Tjoelker <jilles@stack.nl>
To:        "Mikhail T." <mi+thun@aldan.algebra.com>
Cc:        stable@freebsd.org, freebsd-fs <freebsd-fs@freebsd.org>
Subject:   Re: cp from NFS to ZFS hung in "fifoor"
Message-ID:  <20151128224101.GA8470@stack.nl>
In-Reply-To: <5659CB64.5020105@aldan.algebra.com>
References:  <5659CB64.5020105@aldan.algebra.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Nov 28, 2015 at 10:42:28AM -0500, Mikhail T. wrote:
> I was copying /home from an old server (narawntapu) to a new one
> (aldan). The narawntapu:/home is mounted on aldan as /mnt with flags
> ro,intr. On narawntapu /home was simply located on an SSD, but on aldan
> I created a ZFS filesystem for it.

> The copying was started thus:

>     root@aldan:/home (435) cp -Rpn /mnt/* .

> for a while this was proceeding at a decent clip with cp making
> newnfsreq-uests:

>     load: 0.78  cmd: cp 38711 [newnfsreq] 802.84r 1.57u 140.63s 20% 10768k
>     /mnt/mi/.kde/share/apps/kmail/dimap/.42838394.directory/sent/cur/1219621413.32392.hd8cl:2,S
>     ->
>     ./mi/.kde/share/apps/kmail/dimap/.42838394.directory/sent/cur/1219621413.32392.hd8cl:2,S
>     100%
>     load: 1.23  cmd: cp 38711 [newnfsreq] 874.19r 1.66u 154.74s 17% 4576k
>     /mnt/mi/.kde/share/apps/kmail/dimap/.42838394.directory/ML/cur/1219595347.32392.rMDFf:2,S
>     ->
>     ./mi/.kde/share/apps/kmail/dimap/.42838394.directory/ML/cur/1219595347.32392.rMDFf:2,S
>     100%

> ZFS on the destination compressing and writing stuff out and the traffic
> between the two ranging from 30 to 50Mb/s (according to systat), but
> then something happened and the cp-process is now hung:

>     load: 0.55  cmd: cp 38711 [fifoor] 1107.67r 2.09u 194.12s 0% 3300k
>     load: 0.50  cmd: cp 38711 [fifoor] 1112.66r 2.09u 194.12s 0% 3300k
>     load: 0.22  cmd: cp 38711 [fifoor] 1642.37r 2.09u 194.12s 0% 3300k

This normally means that the process is opening a fifo for reading and
is waiting for a writer. Although cp -R will normally copy a fifo by
calling mkfifo at the destination, it may open one if a regular file is
replaced with a fifo between the time it reads the directory and it
copies that file. This is not that unlikely if large directory trees are
copied during that time.

On the other hand, cp without -R/-r/-l/-s will always open a fifo.

You can make cp continue by opening the fifo (which you'll need to find
first, for example by checking what has been copied already) for
writing, like : >/path/to/some/fifo. It will be replaced with an empty
file at the destination.

-- 
Jilles Tjoelker



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20151128224101.GA8470>