Re: file corruption goes undetected - Mailing list pgsql-bugs

From Tomas Vondra
Subject Re: file corruption goes undetected
Date
Msg-id 9abdddef-4c08-4d47-8879-9265e164dacb@vondra.me
Whole thread
List pgsql-bugs
This is expected behavior, not a bug. It'd be great to detect these
kinds of data corruption, but data checksums can't do that (and we don't
have other protections).

regards

On 8/6/26 16:11, Bram van der Vos wrote:
> *ISSUE*
> 
> External modified datafile not detected, no error given but result produced;
> 
> *REPRODUCTION*
> 
> script.sh
> ---
> 
> psql   <<DO_CLEAN_1
> drop database corruption;
> DO_CLEAN_1
> 
> rm -rf /tmp/oscmd.sh
> rm rf /tmp/output_1.txt
> rm rf /tmp/output_2.txt
> 
> psql   <<END_SCRIPT
> 
> \o '/tmp/output_1.txt'
> select version();
> create database corruption;
> \c corruption
> show data_checksums;
> show ignore_checksum_failure;
> create table demo ( a serial, t timestamp with time zone);
> insert into demo (t)  values (now());
> select max(t)  from demo;
> select pg_relation_filepath('demo');
> copy (select command || setting ||'/'||file
>       from (select *  from (select 1 as my_order, 'rm -rf ' as  command,
> pg_relation_filepath('demo') as file
>           union all
>             select 2 as my_order , 'touch ' as command , 
> pg_relation_filepath('demo') as file )
>           cross join (select setting from  pg_settings where
> name='data_directory'))  order by my_order)  to '/tmp/oscmd.sh';
> END_SCRIPT
> 
> 
> cat /tmp/output_1.txt
> chmod 700 /tmp/oscmd.sh
> /tmp/oscmd.sh
> 
> psql -d corruption  <<END_SCRIPT_2
> 
> \o '/tmp/output_2.txt'
> select max(t)  from demo;
> END_SCRIPT_2
> 
> cat /tmp/output_2.txt
> ---
> 
> *ETC*
> Result in tmp/output_1.txt  en tmp/output_2.txt.    After file has been
> removed and recreated with touch  a NULL result is returned. The same
> happens when the has been replaced with dd -if /dev/zero of=<file> 
> bs=1024 count=64000
> 
> When replacing file with bogus data (/dev/random)  an error is being
> returned.   Result when the datafile is being nullified
> 
> side info: pg_backrest does recognise the file as not valid an replaces
> is during restore
> 
> 
> regards
> 
> 
> Bram
> 
> -- 
> vrijdags afwezig
> LOGO <https://www.axisintoict.nl>
> Bram van der Vos
> bram.van.der.vos@axisinto.nl
> 06 127 27 547
> Albert Schweitzerlaan 10b
> 3451 EC Vleuten
> Twitter <https://twitter.com/AxisintoICT>Linkedin <https://
> nl.linkedin.com/in/bramvandervos>
> 

-- 
Tomas Vondra




pgsql-bugs by date:

Previous
From: li kid
Date:
Subject: Re: BUG #19555: TRAP: failed Assert (ent->cmin == change->data.tuplecid.cmin) on logical replication
Next
From: Andrey Rachitskiy
Date:
Subject: Re: BUG #19441: Backend waits for serializable snapshot indefinitely on removing temp relations