Re: /var/log/lastlog -- why is it 19 megabytes?

From: Brian Ashe (rhlist_at_dee-web.com)
Date: 08/25/03

  • Next message: Ravi Narwade: "how I can remoce the spam?"
    To: redhat-list@redhat.com
    Date: Mon, 25 Aug 2003 03:42:45 -0400
    
    

    Rodolfo,

    On Sunday August 24, 2003 11:28, Rodolfo J. Paiz wrote:
    > Is there someone out there with some coding expertise, who can maybe
    > explain why "ls -l" and "ls -sh" give different results? Like this:

    Not that I read the code but it isn't too hard to derive the answer from the
    info page of ls.

    `-s'
    `--size'
         Print the disk allocation of each file to the left of the file
         name. This is the amount of disk space used by the file, which is
         usually a bit more than the file's size, but it can be less if the
         file has holes.

         Normally the disk allocation is printed in units of 1024 bytes,
         but this can be overridden (*note Block size::).

    `-l'
    `--format=long'
    `--format=verbose'
         In addition to the name of each file, print the file type,
         permissions, number of hard links, owner name, group name, size in
         bytes, and timestamp (*note Formatting file timestamps::), normally
         the modification time.

    So in this case it appears you have some VERY "holey" files. Since the -s is
    telling you the space used and the -l is calculating the bytes used by
    (number of blocks allocated - 1) * 512 + remainder.

    Perhaps try running "stat" on a file and see if this is accurate.

    I'll give some examples to try and illustrate this.

    Here is an example file of ~40MB. You will see the blocks in the first version
    and the "human interpretation of those blocks. By default, ls uses 1K blocks
    for it's output of the -s flag.

    [brian@hell test]$ ls -ls testfile
    39376 -rw-r--r-- 1 brian brian 40274705 Jan 20 2003 testfile
    [brian@hell test]$ ls -lsh testfile
     39M -rw-r--r-- 1 brian brian 38M Jan 20 2003 testfile

    Note how what the man page told us holds true here as the two numbers don't
    match. This is because of using (blocks * blocksize) and each having
    different numbers to use. Now let's see what the system _really_ thinks about
    this file.

    [brian@hell test]$ stat testfile
      File: `testfile'
      Size: 40274705 Blocks: 78752 IO Block: 4096 Regular File
    Device: 305h/773d Inode: 109 Links: 1
    Access: (0644/-rw-r--r--) Uid: ( 500/ brian) Gid: ( 500/ brian)
    Access: 2003-08-25 02:24:01.000000000 -0400
    Modify: 2003-01-20 10:34:12.000000000 -0500
    Change: 2003-01-20 10:34:12.000000000 -0500

    Now we see we actually have a 4K blocksize. But the number of blocks is still
    in the default 512b size.

    So let's tell ls what the blocksize actually is and see what it tells us.

    [brian@hell test]$ ls --block-size=4K -ls testfile
    9844 -rw-r--r-- 1 brian brian 40274705 Jan 20 2003 testfile

    Notice the number of blocks changes but the file size doesn't. So now we can
    see that the blocksize is playing a large part in how even the same command
    can interpret what it is seeing.

    However this doesn't explain what's going on, just what you see.

    Everything from here on is either pure speculation or WAG. ;)

    > ls -l:
    > -rwxr--r-- 1 rpaiz rpaiz 1177207676 Aug 3 18:09 Kansas ~ Best of
    > Kansas ~ 04 ~ Dust in the Wind ~ 890B500A.wav
    > ls -sh:
    > 35M Kansas ~ Best of Kansas ~ 04 ~ Dust in the Wind ~ 890B500A.wav
    >

    The difference here looks like a 32 times in difference (35 * 1024 * 1024 * 32
    = 1174405120 (which is pretty close to the 1177207676 you see above
    considering rounding)). Which the only thing I can guess at is perhaps one of
    the two drives has a 32K blocksize and the other has a 1K blocksize. Further
    it would seem that somehow the rsync command you used (or something else)
    transfered blocks instead of bytes and really screwed up the layout of the
    filesystem. I believe you mentioned that you had seen a 98% fragmented system
    and this would seem congruent with some very holey files. Hence the vast
    difference in reported sizes.

    You really need to take a look inside these files to see what's going on. That
    way you can see if there are real file issues or some sort of filesystem
    confusion. You had mentioned earlier that you can't read a file in a hex
    editor due to memory constraints. You should try something like
    head -c 64k <filename> | od -c
    to get a feel for what's in the file (look for zeroes).

    The only thing I can think to recommend that would make sense is to grab a
    defrag tool and see if it can fix it. Or if you can copy a file back to the
    old drive using the same method and then use a different one to get it back
    on the desired drive if that seems to restore sanity to the files.

    Anyway, it's late here and there could be some inaccuracies, but perhaps you
    can either get it fixed or provide some new info. I left out using debugfs
    for now, since it can get very confusing if you're not used to it.

    -- 
    Brian Ashe                                                     CTO
    Dee-Web Software Services, LLC.                  rhlist@dee-web.com
    http://www.dee-web.com/
    -- 
    redhat-list mailing list
    unsubscribe mailto:redhat-list-request@redhat.com?subject=unsubscribe
    https://www.redhat.com/mailman/listinfo/redhat-list
    

  • Next message: Ravi Narwade: "how I can remoce the spam?"

    Relevant Pages

    • Re: tape backup block size
      ... I'm curious how to select a reasonable block size for tape backups. ... My previous drive used a fixed blocksize, ... limit of the hard drives. ...
      (comp.unix.admin)
    • tar, mt backup BLOCKSIZES, variable & fixed question Seagate SDT224000N DDS-3 DAT
      ... I'm having trouble understanding the tar & mt blocksize settings and ... If I run mt blocksize 1024, that sets the actual drive to write data in ... If I make an archive with tar with flag -b 20, ... Also is there a preferred blocksize for DDS-3 DAT drives? ...
      (freebsd-questions)
    • Re: [9fans] VIA VT8237 SATA/RAID i/o errors, dma doesnt work
      ... while i first tried to copy arenas showed that blocksize. ... i conclude for now that doing paralel io on both drives results ... in I/O errors in short time. ...
      (comp.os.plan9)
    • Re: mirroring drives
      ... You could tune it with the bs (blocksize) parameter, ... Be very careful with this. ... drives. ...
      (comp.os.linux.setup)