Re: Hibernation into swap file

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

 



06.05.2019 21:25, Maksim Fomin пишет:
> ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
> On Monday, 6 May 2019 г., 8:40, Chris Murphy <lists@xxxxxxxxxxxxxxxxx> wrote:
> 
>> On Sun, May 5, 2019 at 3:09 AM Andrei Borzenkov arvidjaar@xxxxxxxxx wrote:
>>
>>> 05.05.2019 10:50, Maksim Fomin пишет:
>>>
>>>> Good day.
>>>> Since 5.0 btrfs supports swap files. Does it support hibernation into
>>>> a swap file?
>>>> With kernel version 5.0.10 (archlinux) and btrfs-progs 4.20.2
>>>> (unlikely to be relevant, but still) when I try to hibernate with
>>>> systemctl or by directly manipulating '/sys/power/resume' and
>>>> '/sys/power/resume_offset', the kernel logs:
>>>> PM: Cannot find swap device, try swapon -a PM: Cannot get swap
>>>> writer
>>>
>>> How exactly do you compute resume_offset? What are exact commands you
>>> ise to initiate hibernation? systemctl will likely not work anyway as
>>> systemd is using FIEMAP which returns logical offset of file extents in
>>> btrfs address space, not physical offset on containing device. You will
>>> need to jump from extent vaddr to device offset manually.
>>
>> https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/Documentation/power/swsusp-and-swap-files.txt?h=v5.0.13
>>
>> This says the resume_offset= is an "offset, in <PAGE_SIZE> units,
>> from the beginning of the partition which holds the swap file"
>>
>> Use filefrag (uses FIEMAP) to get the virtual address, multiply by
>> 4KIB to get bytes, and plug that into
>>
>> btrfs-map-logical -l vaddrbyte <dev>
>>
>> The physical number returned is also in bytes. Normally to get LBA
>> you'd divide by 512 (for anything other than a 4Kn drive), but if I
>> understand the kernel document correctly, it needs to be in x86_64
>> page size, so divide by 4096 instead.
>>
>>
>>
>> Chris Murphy
> 
> Thanks everybody for clarification! After several attempts to create 1-extent file it appears that btrfs can do this only for files around 500-600 MiB which is low for my practical needs. If swap file is increased to 1-1.5 GiB, then there is non-contigous extents problem.

Swap files (also used for hibernation) are not required to be contiguous.

> 
> In any case, since swap file can be (with high probability) moved across filesystem, then 1) offset configuration cannot be stored (should be reconfigured for each hibernation) and 2) there is risk that kernel writes directly to disk at wrong place and will corrupt the filesystem. I don't like this feature.

I think we need to allow at least some amount of trust to developers and
expect that this feature would not be released if it had such an obvious
problem.

Of course bug happens and it surely needs wider testing.

> 
> Best regards,
> Maksim Fomin
> 




[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux