Files
hpr-knowledge-base/hpr_transcripts/hpr2313.txt
Lee Hanken 7c8efd2228 Initial commit: HPR Knowledge Base MCP Server
- MCP server with stdio transport for local use
- Search episodes, transcripts, hosts, and series
- 4,511 episodes with metadata and transcripts
- Data loader with in-memory JSON storage

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-26 10:54:13 +00:00

350 lines
28 KiB
Plaintext

Episode: 2313
Title: HPR2313: NilFS2
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr2313/hpr2313.mp3
Transcribed: 2025-10-19 01:12:44
---
This in HPR episode 2,313 entitled NLFS2 and is part of the series' file system.
It is hosted by Klaatu and in about 35 minutes long and currently in a clean flag.
The summary is Klaatu talks about NLFS2.
This episode of HPR is brought to you by an honesthost.com.
Get 15% discount on all shared hosting with the offer code HPR15 that's HPR15.
Bet your web hosting that's honest and fair at An Honesthost.com.
You are the scene to hack our public radio.
My name is Klaatu.
Today I'm going to talk about file systems or rather a file system with a little bit of
background for context.
I think I've done this little demo or explanation, whatever you want to call it, on my show
GnuWorldOrder, which you can find at GnuWorldOrder.info, and it was a while ago if I did.
I might even be misremembering I may not have done this on that show, but either way I'm
going to do it again just to get us all on the same page about what a file system is
exactly, because file system like the concept for me used to be pretty mysterious.
The programming involved in creating a file system still is, but at least I feel like
I kind of get file systems a lot better than I used to, and I want to maybe possibly explain
it in a way that you may not have heard before.
So rather than explaining it with just words, I'm going to explain it with a little demo.
So you can do this along with me at home if you like.
Just be warned that you need some kind of drive that you're willing to completely erase.
So I've got a little two gig thumb drive here that I got at a conference, and if I plug
it into my computer right now and then type in LSBLK.
So that's list block devices, LSBLK, all on string.
If you don't use LSBLK, then you should start using it.
It's a really nice command, actually.
I kind of just found out about it myself this past year.
And previously I used to do the whole D message, tail, and sort of look at what I most recently
plugged in, that kind of thing, and that works, but you do kind of find it maybe possibly
difficult to pass on to other people, and you're kind of like having to describe it
to them, and it's kind of messy output.
And yeah, it takes some parsing, visually speaking.
So LSBLK is a really nice little layout of all the block devices plugged into your computer.
And it's a very attractive, like if you've ever seen the tree command, like the director
tree listing tree layout on Linux, then this is pretty similar to that in terms of layout.
It shows you each device, and of course it gives you the name of the device, like the designation
of the device, SDA, SDA1, SDA2, SDB, SDB1, SDC, and so on.
But it shows it to you in a very intuitive way.
It tells you SDB, okay, and underneath that is SDB1, so you get that, right?
That's a partition within SDB, if that makes sense.
And then it even tells you the size, the size of the disk, the size of the partition,
and it tells you the mount point.
So if I've just plugged in this little SDC drive, there is no mount point, because I haven't
mounted it yet.
Well, that's fine.
If I mount it, then it tells me where it is mounted to, if I then do the LSBLK again,
there it goes.
Slash run, slash media, slash clattu, slash 2GB drive, easy.
And it tells you, like I said, it tells you the size and everything, so it's really easy
to sort of identify a specific drive, which if you've ever talked to someone who has
accidentally raised a drive or installed their Linux distribution over their Windows
drive, because they got confused, or whatever, people do it all the time, and this I just
find it's so easy to read that it's very, very reassuring and comforting and hard to
screw up, to be honest.
That said, you should run the LSBLK command to make sure that the thumb drive that you
may or may not be following along with is the one that you think it is.
So I've just plugged the thing in.
I saw that there's a 1.8GB drive with no partitions on it, that's SDC, and I feel
pretty confident that that's the one that I want to destroy.
So I'm going to unmount it.
And now it's kind of cool, because what you can do in Linux, well first of all, what
we're going to do is destroy any kind of notion of what this drive is.
So I'm going to go into a root shell, so that I have access to that blocked device.
And I'm going to go DD in file, IF equals slash dev slash zero, out file equals slash
dev slash SDC, in your case it might be something else.
So I'm going to, from here on, I'm just going to say SDX, because it's highly unlikely
that you're going to have an SDX on your system, and so that way you won't just sort of forget
and hear me say something and then keep typing.
So OF equals dev SDX, and then we'll just do a count of, that's count equals, let's just
do 496, because that typically seems to be the important bit at the front of the drive
is usually in about the first 496 bytes.
So I hit return, and it very quickly returns the confirmation that DD usually gives you,
you know, tells you how many records in, how many records out.
So that happened very fast, because we just, we only wrote like 496 bytes at the very
front of this drive.
So now if I detach this drive from my computer and then plug it right back in, it's probably
something with you dev I could have done or you disk or something, but anyway I just unplug
it and plug it back in.
Now if there had been a partition there, there's not, because I've been screwing around with
it, but if there had been it would no longer have a partition, you know, no longer have
partition information, it wouldn't really know what kind of drive this was.
It has lost all kinds of information from the start of the drive, which I warned you
that would happen.
So now that we have sort of a blank-ish slate, and we didn't have to do that first, you
can, you can ruin a drive without doing that, but I just wanted to demonstrate that, that
you can sort of, you can think a drive is dead just by killing the information that it
knows about itself, which is kept at the front of the drive.
So it's not always necessarily the worst thing in the world, and that's why you can sometimes
rescue partitions.
So what we'll do now is we will do an echo, and then the string hello, and we will
redirect that to slash dev slash, well, actually, what I'm going to do is just make sure
that I'm still, because I've unplugged and plugged back in.
So LS block is still SDX, okay, perfect.
So I'm going to echo hello, just the string hello, and I'm going to redirect that echo
to slash dev slash SDC.
And again, it just kind of returns nothing because it just works.
So now what we've done is we've echoed the string hello, which is what five bytes
onto the thumb drive that we're using.
So essentially, we've written a file to this thumb drive, but we have not, for instance,
copied the file there, we have not moved the file there, we've not touched the file,
we've not really created a file, we have just echoed raw data to the drive, and you
can actually even see this with, for instance, let's do a couple ways you can do it, but
let's do head, head, dash, c for, I think, count, and we'll do, what do we say, it was
five bytes.
So we'll do count brace, that's the curly bracket, zero dot dot four, I think is what
it should be, I think, if I'm doing that right, and then we'll do slash dev slash SDC,
or SDX rather, no, I was wrong, it was zero dot dot five, and if you do that, then you,
then you get the string hello returned into your terminal, and it's, it's way over on
the left, so it'll appear before you're prompt, it's, it's echoed exactly correctly in
no, no, no breaks, no line breaks.
So we've just pulled the data that we wrote to the file off of the block device, the
data that we've, that we wrote to the drive, off of the block device back into our terminal.
So in theory, you could do that with anything, you know, you could like cat, user shared,
docs, GCC copying, it's not there, but yeah, wherever the, you know, you could, you could,
you could send a whole file to the thumb drive without ever actually making a file, you're
just writing the bytes to the drive, and then if you, if you, if you do a cat on that drive
from a certain byte to a certain byte, then you will get your, you know, file, your data
back.
So I think, and I'm not sure because I haven't done a whole lot of research on this, and
I've never done it myself, but I think that's how tape drives were for a while, or maybe
even just hard drives in general were for a while, way, way back.
You kind of, you know, you would tar everything up into a tape archive, tar file, and then
you would dump it onto this thing, and you kind of had to know, or something on your system
had to know, okay, so that, that archive is stored from, let's say, you know, 0 to 255 bytes,
it's not a very big archive.
And, and we've got another archive, the, the rest of the backup, or the, you know, the
next day's backup is 256 to 512, and then when you pull them off, you would just, you
would tell it, okay, go to sector, such and such, until such and such, and, and pipe
that whole archive back to me, and then I will, I will unarchive it, and there will be
my files in kind of a, a minified file system within that archive.
I could be a little bit hazy on the details, and I'm sure some HPR listener probably knows
a lot more about this than I do, and they should probably record it, and submit that as an
HPR episode, because that'd be really cool to hear.
But anyway, so you could do that, and in theory, if you wanted to be very kind of obscure
about how you store your data, you could send, you know, your shopping list to your,
to a thumb drive without any files, and just cat the, the data to the thumb drive, and
you would know in your head, okay, that's from 0 to 25, bytes 0 to 25 is my shopping
list, it's a short shopping list, it's in code, and then from byte 26 to, to 42, I've got
my, my agenda for the day, you know, my to-do list, and then, and that would work, and
anytime you want to see your agenda, you would just cat 26 to 42, and you would get that
back into your terminal, and you would be able to check things off your list, but now,
if you started checking things off your list, your, your thing is, your, your data is getting
bigger, right?
So let's say you, you, you looked at your shopping list, and you, you got some stuff,
so you wanted to mark that off, but you wanted to add some more stuff on, so you're changing
it, and now instead of your data being from 0 to, whatever I said, 25, it's now maybe
0 to 22, so you got like these sort of three random bytes before the next thing begins,
well that's okay, but we want to add something even longer to the end of it, we don't have
that much space, okay, what we'll do is, we'll, we'll append the rest of our shopping
list at the end of our agenda from 43 to 40, you know, to 62, and we'll just, we'll just
jot down on our little notebook that we keep as our journal, you know, that, that the shopping
list starts at 0, goes to 23, then there's 3 dead blocks, and then skip to 43, and go
to 62, those two things equal my complete shopping list, so obviously if you were to
do this, if you were to fly without a file system, things would get very complex pretty
quickly, I mean, especially if you're ever changing any file, and that's the advantage
of a file system, because a file system can keep track of that stuff for you, it doesn't
have to necessarily write everything contiguously, it might, it just depends on the file system
design, but it can, it can figure out where files need to, to begin where they've ended,
where the changes are stored, and it can kind of track all that stuff for you, or, or
maybe it is part of its design to not split data up and make sure that it can, you know,
move data around to make room for other stuff, whatever, there's lots of different file system
types, and I'm sure we've all heard all the different pros and cons, you know, oh,
this is journaling, this is non journaling, this is, this, this needs to be de-fragged,
this does not need to be de-fragged, all that sort of thing. And so that's a file system,
that's, that's how you can survive with out a file system, although that's not advisable,
but that, that's how you can kind of think of a file system, it's, it's the thing that
you don't have to do when you're writing data repeatedly back to a storage device. So I was
thinking lately about different file systems, and I've been playing around with a couple of
different ones, I mean, JFS, I've been using on my main computers for ages, that's, that's my,
sort of, go to file system, I'm, I'm pretty happy with it, and I'm not see, I'm not seeking
a replacement for that, but in terms of thumb drives, I've, I've, I've never really been super
happy with, with any of the file systems necessarily that I've, that I've used on thumb drives,
and I tend to use UDF, which is the universal disk format, which was originally developed
actually for optical media, like it, it was going to replace, or it is replacement for ISO
9600, so instead of ISO 9600 on DVDs, you may have UDF on Blu-ray, for instance. So UDF is nice
because yeah, to any other system, it's, it's essentially, it thinks it's just kind of a, a
Blu-ray, sort of, not exactly, but, but, but as long as your system can read Blu-ray, for instance,
then, and most of them can these days, you know, they usually have that driver, then it can
probably read a UDF device. That's not always true, I mean, it depends on the, on the computer,
the, the OS and how the, the, the OEM, or not the OEM, but the, the programmers have, have sort of
made the OS aware of what driver to invoke at certain times, but, but generally speaking, UDF
has been a really good cross-platform and permissionless file system. The main problem with it is
that it doesn't have an FSCK function at all. I tracked one down to, I think, Solaris, and it's,
I think it would either not build, or it wasn't complete, and I, I heard rumors that NetBSD had one,
but I'm not sure. And either way, you have to work that hard for an FSCK, you kind of lose a
little bit of confidence in that format. So, I was kind of looking at other, other options,
and then something happened with UFS recently that, that kind of, that's UFS, the BSD file system,
Unix file system, whatever, that, where I hadn't had journaling turned on, and so, I don't know,
I got to thinking about looking at other file systems, not, not to replace anything, just to,
just to branch out. That's what I'm trying to say. So, one of the file systems that kind of
came up a couple of times was NILFS, and NILFS, I believe I first heard from my friend DeepGeek,
who you will probably know from previous hacker public radio episodes. He does, he did talk geek to
me, and I'm pretty sure he did a really great episode on Beowulf Clusters, if I recall correctly.
So, yeah, you might know him. You might not. It doesn't matter. He told me about NILFS a long time ago.
And it kind of made me, when I, when I, when I was looking around and they kind of kept coming up,
I thought, okay, I'm going to look into this thing. Because specifically, I thought NILFS meant,
like NIL in American English, is a synonym for NUN. You know, like NIL is, it means zero. It means
NUN. I don't know if it's slang or what, but that's, it means zero. So, I thought NILFS meant
no file system, and I thought, okay, I'm going to look into this, because that sounds crazy enough
to sort of be something that might be fun to play with. Turns out NILFS has nothing to do with zero
values. It has, it has zero to do with zero values. It, it, it stands for new implementation
of log-structured file system, NILFS. So, it was developed apparently by NEPON telegraph and
telephone. So, sort of, I guess the Japanese version of AT&T maybe. And it is designed to be a
snapshotting file system. And I've never really played around with that. But a lot of people obviously
talk about snapshotting nowadays because of ZFS and ButterFS and I think CFFS. Lots of, lots of
modern file systems seem to kind of be really excited about this concept of built-in snapshots.
So, I figured I'd give it, give, give NILFS a go and try to learn how to, how to use it. And,
it's not that hard to, um, to play around with really. It's, it's not bad at all. So, if you,
if you install NILFS, um, you'll probably find that you already have it on, on most Linux systems
because unless someone trimmed it down your kernel quite a bit, it should be included from what
I understand since like 2005. I don't know what its support is like in other operating systems.
I've not looked into that at all. But, um, you, you should find that you have it. And if you do an
MKFS.nilFS2, NILFS2, you, you should find that it exists on your system. And, of course,
the Dash H will give you the help and it's, it's a pretty simple kind of typical
MAKFS interface. So, it's MKFS.nilFS2-capitalL for the label. So, I'll just call this, um,
um, NIL, NIL. And, uh, let's see, I think that's about all I need. Really. SlashDev-sdx.
Now, you're noticing possibly that I'm not bothering to put a partition on this device.
And I don't know if NILFS has once a partition or if it needs a partition. Well, I know it doesn't
need a partition because it works. But, um, I don't know if it wants a partition. I don't know
what the advice of the NILFS people is about partitioning, but I just, I'm not going to bother right
now. Um, and it never has complained. It just, it just creates a file system. So, at this point,
if I, um, eject NILFS, the device, rather, and then pop it back in and by eject, I'm in an
attach or detach. So, there I've got NIL, NIL. And if I click on it, it should open up in the file
manager and there it goes. So, it's an empty, a very empty drive. It doesn't even have that
lost and found folder that the EXT file systems drop in. So, it's, it's almost unsettling how empty
this thing is. Okay, so the, the first thing that we'll do then is, um, we'll, we'll, we'll just
CD into slash run, slash media, slash clot 2, slash NIL, NIL, uh, and do an LS. And sure enough,
there's nothing there. So, now if I do an LSCP, so all of the, um, not all of the, but many of the
NILFS commands, uh, are, are appended with CP, meaning not copy, but checkpoints. So an LSCP
is to list all the checkpoints on this drive. Now right now, there's only one checkpoint.
And that is, uh, just a couple of seconds ago because I created a checkpoint. And this is a
little bit over verbose, um, honestly, or at least to start with. I'm sure these are very,
this is all very useful information. But to start with, it's, it's a little bit over verbose.
So the only thing you really need to look at is the, um, the, the number, the checkpoint number,
which is on the extreme left. So right now, I'm, I, I'm looking at one. It's labeled one.
It tells you the date and the time that that checkpoint was, uh, cataloged. And then it tells you
what it is. So the mode is, in this case, uh, a checkpoint. And as far as I know, it can be two
modes. It can be a checkpoint, CP, or it can be a snapshot, SS. And that's really, that's the
part that you need to sort of know really. So now if we touch a file, if we touch, um, test1.txt,
and we can even echo, hello, uh, CP1 into our, our test file, just, just for kicks. So now if I
do an LSCP again, because now we've created a file, we've put stuff in the file,
it's made a new checkpoint. And that checkpoint is number two. And it is just, just seconds ago.
And it is still a checkpoint, a CP. So that's checkpoints for you in no FS. What you can do
is, if you want to, uh, you can do an LSCP-S to list the snapshots. That's actually a filter on
the checkpoints. So I get nothing right now. I get just the headers, the, you know, I get no content
of, of, of that list. And that's to be expected because we don't actually have any snapshots yet.
But we can create snapshots. And the way that you create a snapshot is that you convert a checkpoint
into a snapshot. So I know that we're at a pretty good state in our file system right now. We've got
this, this test file. It says some stuff in it. Let's go ahead and do a, um, make checkpoint,
MKCP. But we're not going to make a checkpoint. I mean, you could. That would be kind of like a
get commit or a get, yeah, I guess it would be like a get commit if we're, yeah, let's call it a
get commit, um, make, make checkpoint and then dash S or, or dash, dash, snap shot if you prefer
the long form, uh, and hit return. And you've just made a snapshot of your file system. You can check
that with LSCP. And sure enough, I've got one is a, at, at a certain, at 1554, uh, cop, uh, checkpoint.
I got two at 1556 checkpoint. And I got number three at 1556 and 53 seconds snapshot.
So there you go. Um, that's because I've converted the checkpoint to a snapshot. It's not because I
did it at the same time. It's, it's on my system. It shows that being about, I don't know, eight,
eight seconds apart. I'm not really sure what the eight seconds are for. But, um, yeah, it's
creating the snapshot from that previous checkpoint. So three is a snapshot. So again, LSCP dash S,
just to just show the snapshots. Now I've got, yeah, snapshot number three or item number three,
which is the only thing on, on this line is a snapshot. And it was taken today at 1556, 53.
So the LSCP dash S is kind of a nice way to just kind of filter out the needless information of,
of all those checkpoints. Like it's, it's nice to know the checkpoints. But at the same time,
it kind of doesn't matter that much because the only thing that's going to really stick
are the snapshots. So let's just do an RM, test1.txt. It says remove regular file. Yes, remove that file.
Okay. So now I have got an empty drive. Well, not technically. There's a hidden directory there
about nilf s. But anyway, now I've got an empty drive. The file that I created is gone. It's
totally gone. Okay, perfect. So I'll get out of this, uh, this place and I will now eject my drive.
Now this is where a little bit of, um, intervention is going to be required because if I just pop
this drive back in, then my file manager is going to want to access it in its current state.
And it's the latest checkpoint. So if I do that and I just did, it's an empty window again. There's
nothing, there's nothing in this, uh, on this drive. It's gone. I removed the file. I mean,
obviously it's gone, right? Okay. So I will, I will eject this again.
And it's safe to remove it. It says so I'm going to remove it and then I'm going to reattach it.
But I'm not going to mount the, the hard drive via my, my desktop anymore. I'm going to instead
do a make directory in my temp directory and I'll call it, um, nil. And now I will do a mount,
a manual mount. So I'm going to do mount, dash, dash, type, nil, fs, two, dash, dash, read, dash,
only, dash, dash, options. And the option that I want to invoke, which is specific to nil, fs,
two. This wouldn't, this wouldn't make any sense to anything else, uh, is cp equals three y3.
Well, because that's where my, uh, snapshot is. And then we'll do slash dev slash sdx.
And we'll mount that to slash temp slash nil. So now if I launch, um, if I launch a browser,
a window browser file manager is what they're called, uh, to slash temp slash nil.
There's my test 1.txt. And of course it does contain hello cp1.
So there you go. A file that I've removed still exists because I took a snapshot out of it.
And that's pretty impressive. It's one of those features that you, once you see it in action,
like once you really experience it, I mean, you've heard about it now, right? You've,
you've listened in on me as I've, as I've, as I've tried it and it works.
But I urge you to go home and try this yourself because it is immensely satisfying. I mean,
you might be one of those people who have already switched over to butter, fs, or zfs, or something,
but, um, for me, seeing that in action, it was pretty darned impressive.
Um, the workflow is a little bit funny. Um, I'm not sure 100 percent,
you know, how, how you would decide when to take a snapshot. Maybe you would take a snapshot
every couple of hours. Maybe you'd take a snapshot at the end of every day. I don't know.
Um, I guess it kind of depends. I'm, I, I think that my only personal, um,
equivalent to this experience has been get and get is obviously very project oriented,
or at least I shouldn't say obviously because it's not obvious. The way that I use get is very
project oriented and it tends to be project oriented. Now, I know that some people
out there use get to manage their home directory. I've heard of people doing that. And,
yeah, that would never work for me, um, because of all the, the huge binary blobs that I would have
lying around. And, and like, why would you commit that to get? But, um, I mean, if it's on the drive
anyway and you're taking a snapshot, it kind of makes a lot of sense. The, I guess the,
the question is like, again, just how do you know when to take that snapshot? You know, you,
you take it when you just feel really good about something or, you know, like, yeah, I don't
know, I, I feel like with git, I can, I can make commits and pushes like a snapshot I'm thinking of
as a push, you know, like if I snapshot something, then that's been committed to, or that's been
pushed to the remote. That is now something that is set in stone. It, it exists. Whereas if I'm,
you know, the checkpoints, I guess would be like the commits and you don't make the checkpoints. You
just, you know, the, the checkpoints happen as you, as you work. So that's really easy for me.
That's, I get that. It's the question of when do I say, okay, this is a point in time that I
might want to come back to this particular file. And, in, in that, then when do I know that,
how do I find that file again? You know, there's no, I don't know yet at least how to annotate
anything. So it's not like I could make a bunch of changes to something and then do a commit
log where, where I'm saying, like, okay, I've implemented this feature. Oh, I broke this feature,
but I fixed another one in the next, you know, in the next commit, I'll fix this feature again.
You know, I don't, with a, with this snapshot feature, I don't, I don't really know how to
make that happen. That said, it sure is refreshing to be able to just delete stuff and then go back
to a snapshot. And there it is again, or, you know, screw it up and then go back to a snapshot.
So it is, it's definitely neat. It's definitely a satisfying experience. And if you have not tried it,
you should try it. You've just heard me do it. It is super easy to, to attempt. It is easy to
implement. It's pretty much built in. There's no extra install. Yeah, it's, it's worth a shot. Now,
I did all of that as root. And if you don't do it as root, then, then you will have to manage permissions
and make sure that you're doing things, you know, as, as you would on a, on a, an external drive,
on Linux. NILFS is conscious and aware of, of file permissions. So if you don't do something
with the file permissions on that drive, you will run into that sort of weird, like, I have a thumb
drive and I'm plugging it into my, my, my computer at school or at work, where my username is one
thing. And then I come home and I'm plugging it into my home computer, where my username is some
other thing, or I'm handing it to my friend, whose username is, you know, you have that whole thing
happening because it's, it's a, yeah, it's a permission-aware file system, which
great for some things, not so great for other things. So I'm not really sure how, how much I'll
actually use NILFS on thumb drives necessarily. But it is definitely something I'm going to start
looking into for kicks because it is kind of fun to try. And it has been around since apparently,
like, 2005. So it's, it's been around, it's got a history, I don't know if that means it's proven
exactly or not. But I don't know, it seems to be a pretty cool little file system to, to mess
around with. So NILFS 2, you should try it. It's fun. Thanks for listening. I'll talk to you next time.
We are a community podcast network that releases shows every weekday, Monday through Friday.
Today's show, like all our shows, was contributed by an HPR listener like yourself. If you ever
thought of recording a podcast, then click on our contributing to find out how easy it really is.
HECCA Public Radio was founded by the digital dog pound and the infonomicum computer club,
and it's part of the binary revolution at binrev.com. If you have comments on today's show,
please email the host directly, leave a comment on the website or record a follow-up episode yourself.
Unless otherwise status, today's show is released on the creative comments,
attribution, share a light, 3.0 license.